<span class="s1" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Alamofire 从githib 的例子上看出来。他不能直接从</span><span class="s2" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">response</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">里面得到道返回值,因为运行的时候是异步的</span>
即:结果可能就是在 返回值的时候并没有得到JSON值 所以一般的返回的值时空的
所以只能在写一个函数在response里面调用
func getRequest(mURL:String,params:[String:String],completionHandler: (NSDictionary?, NSError?) -> ()){
Alamofire.request(.GET,AFHttpConstant.API_SERVER_DOMAIN+mURL,parameters: params)
.validate()
.responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
switch response.result {
case .Success(let data):
completionHandler(data as? NSDictionary, nil)
case .Failure(let error):
completionHandler(nil, error)
}
}
}
这里面 在.Success 里调用了函数 completionHandler.
这里面有两个值得注意的地方
1. completionHandler 是function getRequest 的参数 类型为 (NSDictionary?,NsError?)返回值为()
在swift 里可以把函数当作参数传递进来 此时可以给函数 completionHandler里面的参数赋值 这样 传进来的函数 completionHandler里面的参数就变了。这样也等于给传入的变量赋值了。
2. 传入的是函数必须有函数的格式 (参数)->(返回值)
如何调用呢?
http.getRequest(URL,params: mParams){
responseObject, error in
print("responseObject = \(responseObject); error = \(error)")
return
}
closure的调用方法 变量可以不用声明。最后改变的就是responseObject 和error的值
PS:纯属个人观点有问题一起探讨
参考网页:
http://stackoverflow.com/questions/27390656/how-to-return-value-from-alamofire