我正在尝试让一个用户选择其用户名;如果在注册过程中尚未使用该证书,则可以继续进行操作,否则无法注册。
我有以下内容:
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
部分,我无法理解为什么将'()'类型的返回表达式转换为'Bool'>>类型?
有人可以帮我吗?
答案 0 :(得分:0)
您的验证是异步的,因此您应该使用回调而不是返回值。
所以它应该看起来像下面的
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()
}
}
}
}