Alamofire 请求为零
Alamofire request coming up nil
我正在开发一个 iOS 应用程序,用户 WebServices 和我发现 Alamofire 非常适合我正在做的事情,但我遇到了问题;该应用程序要求用户登录,这是一个 Alamofire 调用,它做得很好。
问题是,它必须根据另一个 Alamofire 请求的内容创建一个集合视图,但总是 nil
。
func getJSON(URLToRequest: String) -> JSON {
let comp:String = (prefs.valueForKey("COMPANY") as? String)!
let params = ["company":comp]
var json:JSON!
let request = Alamofire.request(.POST, URLToRequest, parameters: params).responseJSON {
response in
switch response.result {
case .Success:
if let value = response.result.value {
json = JSON(value)
}
default:
json = JSON("");
}
}
debugPrint(request.response)
return json;
}
相同的代码块非常适合登录,但在这种情况下不是 BTW 调试打印总是打印 nil
您正在尝试在设置之前访问 request.response
,请记住 Alamofire 异步工作,因此您必须 return如果 JSON 使用闭包,但请记住 Alamofire 也会 return 出错,因此我强烈建议改用以下代码:
func getJSON(URLToRequest: String, completionHandler: (inner: () throws -> JSON?) -> ()) {
let comp:String = (prefs.valueForKey("COMPANY") as? String)!
let params = ["company":comp]
let request = Alamofire.request(.POST, URLToRequest, parameters: params).responseJSON {
response in
// JSON to return
var json : JSON?
switch response.result {
case .Success:
if let value = response.result.value {
json = JSON(value)
}
completionHandler(inner: { return json })
case .Failure(let error):
completionHandler(inner: { throw error })
}
}
诀窍在于 getJSON
函数采用了一个名为 'inner'
的附加闭包,类型为 () throws -> JSON?
。这个闭包要么提供计算结果,要么抛出异常。闭包本身是在计算期间通过以下两种方式之一构建的:
- 如果出现错误:
inner: {throw error}
- 如果成功:
inner: {return json}
然后你可以这样调用它:
self.getJSON("urlTORequest") { (inner: () throws -> JSON?) -> Void in
do {
let result = try inner()
} catch let error {
print(error)
}
}
希望对你有所帮助。
我正在开发一个 iOS 应用程序,用户 WebServices 和我发现 Alamofire 非常适合我正在做的事情,但我遇到了问题;该应用程序要求用户登录,这是一个 Alamofire 调用,它做得很好。
问题是,它必须根据另一个 Alamofire 请求的内容创建一个集合视图,但总是 nil
。
func getJSON(URLToRequest: String) -> JSON {
let comp:String = (prefs.valueForKey("COMPANY") as? String)!
let params = ["company":comp]
var json:JSON!
let request = Alamofire.request(.POST, URLToRequest, parameters: params).responseJSON {
response in
switch response.result {
case .Success:
if let value = response.result.value {
json = JSON(value)
}
default:
json = JSON("");
}
}
debugPrint(request.response)
return json;
}
相同的代码块非常适合登录,但在这种情况下不是 BTW 调试打印总是打印 nil
您正在尝试在设置之前访问 request.response
,请记住 Alamofire 异步工作,因此您必须 return如果 JSON 使用闭包,但请记住 Alamofire 也会 return 出错,因此我强烈建议改用以下代码:
func getJSON(URLToRequest: String, completionHandler: (inner: () throws -> JSON?) -> ()) {
let comp:String = (prefs.valueForKey("COMPANY") as? String)!
let params = ["company":comp]
let request = Alamofire.request(.POST, URLToRequest, parameters: params).responseJSON {
response in
// JSON to return
var json : JSON?
switch response.result {
case .Success:
if let value = response.result.value {
json = JSON(value)
}
completionHandler(inner: { return json })
case .Failure(let error):
completionHandler(inner: { throw error })
}
}
诀窍在于 getJSON
函数采用了一个名为 'inner'
的附加闭包,类型为 () throws -> JSON?
。这个闭包要么提供计算结果,要么抛出异常。闭包本身是在计算期间通过以下两种方式之一构建的:
- 如果出现错误:
inner: {throw error}
- 如果成功:
inner: {return json}
然后你可以这样调用它:
self.getJSON("urlTORequest") { (inner: () throws -> JSON?) -> Void in
do {
let result = try inner()
} catch let error {
print(error)
}
}
希望对你有所帮助。