2016-02-12 45 views
1

我正在开发一个iOS应用程序,用户Web服务和我找到Alamofire只是完美的我在做什么,但我有一个问题;该应用程序要求用户登录这是一个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

Debug Print

回答

1

你试图访问request.response它一直前请记住Alamofire异步工作,因此您必须使用闭包返回JSON,但请记住Alamofire也会返回错误,因此我强烈建议使用以下代码:

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函数采用称为类型() throws -> JSON?'inner'一个附加的封闭。这个闭包将提供计算的结果,或者它会抛出。盖子本身是由两种方法之一来计算期间构建:

  • 在一个错误的情况下:inner: {throw error}
  • 在成功的情况下:inner: {return json}

然后你就可以调用它这样:

self.getJSON("urlTORequest") { (inner:() throws -> JSON?) -> Void in 
    do { 
    let result = try inner() 
    } catch let error { 
    print(error) 
    } 
} 

我希望这对你有所帮助。

+0

这个作品刚刚完美!非常感谢;但是你看到我对Swift有点新,并且代码在“inner :()throws - > JSON中失去了我”部分 –

+0

不客气,还有另外一种方法可以用JSON返回一个闭包,但我认为这是最好的,因为让你在这个过程中捕捉错误,闭包在开始时是很难的话题,但是一旦你知道它是一个强大的工具。 '(内部:()抛出 - > JSON?'这只是一个函数,它返回一个'JSON?'或抛出一个错误就是这样,没有什么更不要害怕 –