2016-09-12 36 views
1

此代碼完全適用於我之前在iOS 8和swift 2.0中的項目。上下文關閉類型響應<AnyObject> - > void期望1個agrument,但3個在閉包體中

這裏是我的代碼:

let url=NSURL(string: _resourceURL)! 

Alamofire.request(.GET ,url).responseJSON { (request : NSURLRequest?,response: NSHTTPURLResponse?, result: Result<AnyObject>) -> void in 
    print(result.value.debugDescription) 
} 

現在我試着與iOS 9,雨燕3.0,alamofire 4.0.0 但引發以下錯誤:

Generic type 'Result' specialized with too few type parameters (got 1, but expected 2)
Use of undeclared type 'void'
Contextual closure type 'Response -> Void' expects 1 argument, but 3 were used in closure body

+0

'Result ' – ozgur

+0

@ozgur這將修復泛型類型錯誤,但應該只有一個參數,而且應該是'Response 類型' – Callam

回答

0

如果沒有您需要將JSON投射到的特定對象,並且您很高興通過密鑰訪問屬性,您可以這樣做:

Alamofire.request(.GET, url).responseJSON { response in 
    if let JSON = response.result.value { 
     print("JSON: \(JSON)") 
    } 
} 
0

Alamofire的有用精靈們寫了一篇簡潔但不可缺少的文章migration guide,包括'之前/之後'風格的代碼片段。基於這些,還有你需要用你的代碼做AF 4.0工作幾件事情:

  1. 傳遞到自己的URL作爲String(其中AF延伸到符合其自身URLConvertible協議),而不是NSURL。
  2. 切換URL和方法的順序。 ...
  3. ... Swift 3切換到小寫枚舉(SE-006),所以AF 4+中的方法是小寫。 ...
  4. ...雖然我們在這,.get是默認的方法,所以我們可以完全放棄它。
  5. URLRequest不再有NS前綴。
  6. 切換到新的DataResponse類型,其中包含我們的朋友result,requestresponse

所以工作的代碼可能看起來像:

// resourceURL 
let url = "http://www.example.com/endpoint" 

Alamofire.request(url).responseJSON { dataResponse in 
    guard 
    let request = dataResponse.request, 
    let response = dataResponse.response 
    else { fatalError("Don't ship me, debug me, master!") } 

    print(dataResponse.result.value.debugDescription) 

這XCode中8GM編譯,但我還沒有運行它(沒有真正的終點),所以鹽和所有的糧食。

相關問題