【发布时间】:2017-01-11 12:28:17
【问题描述】:
我想注册一个异步执行的用户。但是,调用函数的行为是同步的,因为只有在成功创建用户后程序才应该继续。 目前的实现是:
class SignUp: NSObject {
// ...
func signUpUser() throws -> Bool {
guard hasEmptyFields() else {
throw CustomErrorCodes.EmptyField
}
guard isValidEmail() else {
throw CustomErrorCodes.InvalidEmail
}
createUser( { (result) in
guard result else {
throw CustomErrorCodes.UserNameTaken
}
return true // Error: cannot throw....
})
}
func createUser( succeeded: (result: Bool) -> () ) -> Void {
let newUser = User()
newUser.username = username!
newUser.password = password!
// User is created asynchronously
createUserInBackground(newUser, onCompletion: {(succeed, error) -> Void in
if (error != nil) {
// Show error alert
} else {
succeeded(result: succeed)
}
})
}
}
在 ViewController 中,注册的启动方式如下:
do {
try signup.signUpUser()
} catch let error as CustomErrorCodes {
// Process error
}
但是,这不起作用,因为createUser 不是一个抛出函数。如何确保signUpUser() 仅在成功创建新用户时返回true?
【问题讨论】:
标签: ios swift asynchronous closures