2016-02-12 73 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?'或拋出一個錯誤就是這樣,沒有什麼更不要害怕 –