У меня есть RegistrationViewController
, где я хочу, чтобы пользователи регистрировали свои учетные записи. Я также создал класс взаимодействия с сервером под названием ServerInteraction
.
Вот как я вызываю функцию из моего ServerInteraction
для регистрации нового пользователя:
var json: JSON = ServerInteraction.registerUser(self.fullnameTextField.text, phone: self.telephoneTextField.text, password: self.passwordTextField.text, photo: self.image)
А вот объявление этой функции в классе ServerInteraction
:
class func registerUser(fullname: String, phone: String, password: String, photo: UIImage?) -> JSON {
// set request params
var params = [
C.register.rawValue: "true", C.registerName.rawValue: fullname, C.password.rawValue: password, C.phone.rawValue: phone, C.registerDescription.rawValue: "", C.registerType.rawValue: "Student"
]
if let picture = photo {
let imageData = UIImageJPEGRepresentation(picture, 0.2)
let urlRequest = urlRequestWithComponents("http://host.com/addUser.php", parameters: params, imageData: imageData!)
Alamofire.upload(urlRequest.0, data: urlRequest.1)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println("\(totalBytesWritten) / \(totalBytesExpectedToWrite)")
}
.responseJSON { (_, _, data, error) in
if error == nil {
// check for coming data
if let data: AnyObject = data {
// convert to json
let json = JSON(data)
dispatch_async(dispatch_get_main_queue(), {
return json
})
}
} else {
dispatch_async(dispatch_get_main_queue(), {
return JSON(["error": true])
})
}
}
}
}
Я хочу отправить результат JSON с сервера обратно на RegistrationViewController
и использовать его там. Но компилятор говорит:
Отсутствует возврат в функции, которая, как ожидается, вернет «JSON»
в конце функции.
Затем я попытался создать переменную для хранения результата JSON, а затем вернуть его, но он всегда равен нулю, потому что сервер отвечает немного позже и возвращает нулевое значение.
class func registerUser(fullname: String, phone: String, password: String, photo: UIImage?) -> JSON {
// set request params
var params = [
C.register.rawValue: "true", C.registerName.rawValue: fullname, C.password.rawValue: password, C.phone.rawValue: phone, C.registerDescription.rawValue: "", C.registerType.rawValue: "Student"
]
// added a variable here
var result: JSON!
if let picture = photo {
let imageData = UIImageJPEGRepresentation(picture, 0.2)
let urlRequest = urlRequestWithComponents("http://host.com/addUser.php", parameters: params, imageData: imageData!)
Alamofire.upload(urlRequest.0, data: urlRequest.1)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println("\(totalBytesWritten) / \(totalBytesExpectedToWrite)")
}
.responseJSON { (_, _, data, error) in
if error == nil {
// check for coming data
if let data: AnyObject = data {
// convert to json and set to result variable
result = JSON(data)
}
} else {
// set an error to result variable
result = JSON(["error": true])
}
}
}
// nil value here
return result
}
Как тут дождаться результата или есть какие-то другие решения этой проблемы?