Alamofire请求来临零
我正在开发一个iOS应用程序,用户Web服务和我发现Alamofire只是完美的我在做什么,但我有一个问题; 该应用程序要求用户login这是一个Alamofire电话,并做得很好。
问题是,它必须创build一个基于另一个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; }
相同的代码块完美的login,但不在这种情况下BTWdebugging打印总是打印nil
在尝试访问request.response
之前,请记住Alamofire是asynchronous工作的 ,因此您必须使用闭包返回JSON,但请记住Alamofire也会返回一个错误,所以我强烈build议使用代码如下:
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'
的types() throws -> JSON?
。 这个闭包将提供计算的结果,否则会抛出。 封闭本身是通过以下两种方法之一在计算过程中构build的:
- 在发生错误的情况下:
inner: {throw error}
- 如果成功:
inner: {return json}
然后你可以这样调用它:
self.getJSON("urlTORequest") { (inner: () throws -> JSON?) -> Void in do { let result = try inner() } catch let error { print(error) } }
我希望这可以帮助你。
- 我可以以编程方式获取连接到我的手机的无线networking的MAC地址?
- 重写触摸开始在Swift中
- 迅速在不同的UnsafePointer <T>之间进行投射
- Swift – 如何将两个视图控制器链接到一个容器视图,并使用分段控制在它们之间切换?
- 用户卸载ios应用程序时如何获取设备详细信息
- Swift是否支持面向方面编程?
- Swift 2.1核心数据 – 保存具有一对多关系的数据,但如果已经存在,则不要添加等值数据
- 单击第一个ViewController中的button,更改第二个ViewController的标签文本
- 如何在Swift for iOS中正确使用CFNotificationCenterAddObserver