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()
}
}
}
}
我正在尝试让用户 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()
}
}
}
}