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

smdnsysy  于 2023-03-11  发布在  Swift
关注(0)|答案(1)|浏览(108)

我在onAppear中有一个条件出现在我的快捷视图中
我想在my 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是新手。
我的回收站firstCall()

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

2wnc66cl1#

将第一个调用更改为正确的异步等待格式

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)
    }
    }
}

相关问题