Ios 快速功能完成
我读了一些书,在一篇类似的帖子()中有人推荐我,并尝试对我的代码执行同样的操作,但我现在找不到调用函数的方法 我得到一个错误:无法将表达式的类型“(响应:@lvalue String)”转换为类型“((响应:String)->())->()” 功能如下:Ios 快速功能完成,ios,function,swift,alamofire,Ios,Function,Swift,Alamofire,我读了一些书,在一篇类似的帖子()中有人推荐我,并尝试对我的代码执行同样的操作,但我现在找不到调用函数的方法 我得到一个错误:无法将表达式的类型“(响应:@lvalue String)”转换为类型“((响应:String)->())->()” 功能如下: func call_api_function(completion: (response: String) -> ()) { let api_url_path: String = "http://\(str_api_server
func call_api_function(completion: (response: String) -> ()) {
let api_url_path: String = "http://\(str_api_server_ip):\(str_api_server_port)"
let api_url = NSURL(string: api_url_path + "/devices.xml")!
Alamofire.request(.GET, api_url)
.authenticate(user: str_api_username, password: str_api_password)
.validate(statusCode: 200..<300)
.response { (request, response, data, error) in
var senderror: String = error!.localizedDescription
completion(response: senderror )
if (error != nil) {
println(senderror)
}
// do other tasks here
}
}
func调用api函数(完成:(响应:字符串)->()){
让api\u url\u path:String=“http://\(str\u api\u server\u ip):\(str\u api\u server\u port)”
让api\u url=NSURL(字符串:api\u url\u path+“/devices.xml”)!
请求(.GET,api_url)
.验证(用户:str\u api\u用户名,密码:str\u api\u密码)
.validate(statusCode:200..根据您对调用api函数的定义,您可以这样调用它:
call_api_function() { response in
activityInd.stopAnimating()
// now use `response` here
}
我建议您对中的尾部闭包进行一些研究
但是,话虽如此,您的调用api\u函数
本身也有问题
- 您正在对
错误
可选项进行强制展开。如果没有错误怎么办?然后,对无
可选项的强制展开将失败,代码将崩溃
- 如果请求成功,则您没有对返回的
数据执行任何操作。您执行请求可能是因为希望对返回的数据执行某些操作
不幸的是,您没有提供有关所期望的XML响应的性质的信息,但是您可能会实例化一个NSXMLParser
实例来解析它,然后实现NSXMLParserDelegate
方法并调用parse
方法
- 在前面几点的基础上,我希望看到的闭包不是一个带有单个非可选参数的闭包,而是一个带有两个可选参数的闭包,一个带有解析数据的可选闭包(如果请求和解析成功,将设置该闭包),另一个带有
NSError
(只有出现错误时才会设置该闭包)
- 这是一个很小的问题,但您可能希望采用Cocoa命名约定(例如
callApiFunction
的camelCase约定)
顺便说一句,显示了一个带有两个参数的闭包示例。显然,如果您处理的是XML,您可能也想解析它,但另一个答案说明了通过闭包传递两个参数的想法。
call_api_function() { response in
activityInd.stopAnimating()
// now use `response` here
}