在 .onAppear{} swiftui 上完成另一个调用后执行调用

Execute call after another is completed on .onAppear{} swiftui

提问人:dhaval123 提问时间:3/6/2023 最后编辑:dhaval123 更新时间:3/6/2023 访问量:425

问:

我在我的 swiftui 视图上的 onAppear 中有一个条件

我想在我的 firstCall() 结束后执行 if 条件

我的onAppear:

 .onAppear{
        
        firstCall()
        
        
        if mybool{ // I want this to be executed just after the firstCall() is completed
            value = repo.secondCall(int: self.initialValue)
        }
        
    }

我想在要执行的 if 条件之前结束的 firstCall 方法

func firstCall(){
        
         Task{
            do{
                try await repo.firstCall().watch(block: {myView in
                    
                    self.initialValue = myView
                    
                    
                })
            }catch{
                print("error")
            }
        }
    }

我需要这个,因为在执行 if 语句之前,我需要为我的 self.initialValue 设置一个值。

另外,第二次调用很少会执行,那么在 swiftui 上执行此操作的最佳性能方式是什么,我是 swift 的新手。

我的repo.firstCall()

fun firstCall(): CommonFlow<User?> {
        return realm.query<User>("_id = $0", ObjectId.from(userId)).asFlow().map {
            it.list.firstOrNull()
        }.asCommonFlow()
    }
swift swiftui swift3 领域

评论


答:

1赞 lorem ipsum 3/6/2023 #1

将第一次调用更改为正确的异步 await 格式

func firstCall() async {
        do{
            try await repo.firstCall().watch(block: {myView in
                
                self.initialValue = myView
                
                
            })
        }catch{
            print(error)
        }
    
}

然后使用.task

.onAppear{
    Task{
    await firstCall()
    
    if mybool{ // I want this to be executed just after the firstCall() is completed
        value = repo.secondCall(int: self.initialValue)
    }
    }
}

评论

0赞 dhaval123 3/6/2023
我也想用于 iOS 14,任务仅适用于 iOS 15 :(
0赞 lorem ipsum 3/6/2023
@dhaval123您也可以在 onAppear 中使用 Task,但要知道这是一个弱点。
0赞 dhaval123 3/6/2023
我试过了,它不起作用,调用同时执行
0赞 lorem ipsum 3/6/2023
@dhaval123,如果你把它们都包裹起来,见上文。这不起作用的唯一原因是如果第一次调用不正确,则异步等待函数
0赞 workingdog support Ukraine 3/6/2023
尝试await firstCall()