SwiftUI 和完成处理程序有问题

Having an issue with SwiftUI and completion handlers

我正在尝试让用户 select 他们的用户名;如果在注册期间尚未使用,他们可以继续,否则他们无法注册。

我有以下内容:

Button(action: {

    if (self.verifyUsername(username: self.username)) {
                        
        withAnimation {
                           
            self.isTaC.toggle()
                            
        }
                    
    }) {
                    
        Text("Save Profile and Agree")
                    
    }

调用以下内容:

func verifyUsername(username: String) -> Bool {
    
    userStore.usernameExists(username: username) { flag in
        
        if (flag) {
            
            return true
        
        } else {
        
            return false
        
        }
        
    }
    
}

最后是从 Firebase 获取信息的用户存储:

func usernameExists(username: String, completion: @escaping (Bool) -> Void) {
    
    usernameRef.child(username).observeSingleEvent(of: .value, with: { (snapshot) in
        
        if (snapshot.exists()) {
            
            print("Username Exists")
            completion(true)
            
        } else {
            
            print("Username DOESN'T Exists")
            completion(false)
            
        }
        
    })
    
}

对于 userStore.usernameExists(username: username) { flag in 部分,我收到编译器错误 <>我的代码我不明白为什么?

谁能帮我解决这个问题?

您的验证是异步的,因此您应该使用回调而不是返回值。

因此它应该如下所示

Button("Save Profile and Agree") {

    self.verifyUsername(username: self.username)) {
        withAnimation {
            self.isTaC.toggle()
        }
    }                    

}

// ...

func verifyUsername(username: String, processForCorrect: @escaping () -> ()) {
    userStore.usernameExists(username: username) { flag in
        if (flag) {
          DispatchQueue.main.async {
            processForCorrect()
          }
        }
    }
}