我的API类中有这两种方法可以从API获取数据:
func authenticateUser(completionHandler: (responseObject: String?, error: NSError?) -> ()) {
makeAuthenticateUserCall(completionHandler)
}
func makeAuthenticateUserCall(completionHandler: (responseObject: String?, error: NSError?) -> ()) {
Alamofire.request(.GET, loginUrlString)
.authenticate(user: "a", password: "b")
.responseString { request, response, responseString, responseError in
completionHandler(responseObject: responseString as String!, error: responseError)
}
}
然后在另一个类中,我使用以下代码来访问数据:
API().authenticateUser{ (responseObject, error) in
println(responseObject)
}
代码正在运行但我完全不理解 .
-
func authenticateUser有参数completionHandler :( responseObject:String?,error:NSError?) - >(),这是对completionHandler方法的引用吗?还是一个对象?什么是 - >()的目的?
-
当我调用authenticateUser func时,我如何实际访问响应?在我的任何api函数中都没有返回,funcname {(参数,参数)in ..}语法似乎很奇怪 .
1 回答
completionHandler
是一个闭包参数 . 正如Swift文档所说:因此,闭包用于添加您想要添加到函数执行中的某些功能 .
在您的情况下,您调用
authenticateUser
并传递一个接收(responseObject, error)
并执行println(responseObject)
的闭包 .authenticateUser()
在completionHandler
参数下收到你的闭包,然后调用makeAuthenticateUserCall()
将completionHandler
闭包传递给它 .然后再看看定义,你可以看到
func makeAuthenticateUserCall(completionHandler: (responseObject: String?, error: NSError?) -> ())
这意味着像authenticateUser()
makeAuthenticateUserCall()
是一个函数,它接收一个闭包作为参数,名称为completionHandler
.makeAuthenticateUserCall()
使用 AlamoFire 发出网络请求,并再次捕获作为responseString()
方法参数传递的闭包下的响应 . 所以你有了:然后:
有关更多信息,请阅读文档:Swift Closures