我正在对服务器进行API调用。我正在利用Alamofire来解决这个问题。我正在尝试创建一个使用Alamofire的GET函数返回基于自定义类的对象的函数,该类包含此GET函数提供的各种输出。
我不清楚执行此操作的方式。
这是我的自定义类,其中包含有关响应的详细信息:
import Foundation class ResponsePackage { var success = false var response: AnyObject? = nil var error: NSError? = nil }
在另一个类中,我具有以下功能:
func get(apiEndPoint: NSString) -> ResponsePackage { let responsePackage = ResponsePackage() Alamofire .request(.GET, apiEndPoint) .responseJSON {(request, response, JSON, error) in responsePackage.response = JSON responsePackage.success = true responsePackage.error = error } return responsePackage }
这将返回,nil因为在return执行之前对服务器的调用未完成。我知道我应该能够使用闭包来做到这一点,但是我不确定如何构造它。
nil
return
之间的代码{}等同于Objective-C中的代码块:这是异步执行的代码块。
{}
您所犯的错误是您放置return语句的地方:当您启动请求时,{}直到框架收到响应后,代码才执行,因此,return到达该语句时,机会仍然没有响应。您可以简单地移动以下行:
return responsePackage
在闭包内部,因此func仅在收到响应后才返回。这是一种简单的方法,但并不是真正理想的方法:您的代码将卡在等待答案的过程中。最好的方法也是使用闭包。这看起来像:
func
func get(apiEndPoint: NSString, completion: (response: ResponsePackage) -> ()) -> Bool { let responsePackage = ResponsePackage() Alamofire .request(.GET, apiEndPoint) .responseJSON {(request, response, JSON, error) in responsePackage.response = JSON responsePackage.success = true responsePackage.error = error completion(response: responsePackage) } }