提问人:dhaval123 提问时间:3/6/2023 最后编辑:dhaval123 更新时间:3/6/2023 访问量:425
在 .onAppear{} swiftui 上完成另一个调用后执行调用
Execute call after another is completed on .onAppear{} swiftui
问:
我在我的 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()
}
答:
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()
评论