2015-09-22 16 views
6

Dòng này luôn làm việc tốt cho tôi khi tạo yêu cầu Alamofire và nhận phản hồi JSON.Alamofire + SwiftyJSON biên dịch lỗi sau khi chuyển đổi sang Xcode 7

Alamofire.request(req).responseJSON() { 
     (request, response, data, error) in 

    // .... 

} 

Sau khi nâng cấp lên XCode 7 và chuyển đổi các dự án để Swift 2.0, tất cả các dòng mã mà có yêu cầu Alamofire tôi không hiển thị lỗi này:

'(_, _, _, _) -> Void' is not convertible to 'Response<AnyObject, NSError> -> Void' 
+0

Tôi bị nhầm lẫn, nhưng tài liệu của Alamofire cho biết đó là cách nên gọi. Ngay cả khi tôi lấy nó xuống 2 params, vẫn còn lỗi tương tự, ngoại trừ nó cho thấy (_, _) thay vì (_, _, _, _) – Lavvo

+0

Thêm câu trả lời dưới đây, phải mở một dự án AF trong Xcode7 xem, hy vọng nó hoạt động! –

Trả lời

14

Tìm thấy câu trả lời trong link này nhưng nó là tiếng Nhật. Có vẻ như đây là đúng từ bây giờ (lấy từ câu trả lời trong link):

Alamofire.request(.GET, requestUrl).responseJSON { 
    response in 
    if response.result.isSuccess { 
     let jsonDic = response.result.value as! NSDictionary 
     let responseData = jsonDic["responseData"] as! NSDictionary 
     self.newsDataArray = responseData["results"] as! NSArray 
     self.table.reloadData() 
    }    
} 
+0

Tôi đang cố gắng này ngay bây giờ. Cho đến nay, đây là loại bỏ lỗi biên dịch của tôi. Tôi cần phải làm điều này một vài lần nữa trong các lĩnh vực khác nhau trước khi tôi có thể xây dựng ứng dụng của tôi để kiểm tra, sau đó tôi sẽ cho bạn biết kết quả. – Lavvo

+0

Bạn đã lưu tôi, đây có vẻ là câu trả lời đúng. Tóm lại, điều này hiện đang làm việc cho tôi. Vẫn còn khá một vài chỉnh tôi cần phải làm dựa trên hình thức mới này, nhưng tôi có thể thấy các báo cáo đăng nhập của tôi kéo kết quả. – Lavvo

+0

Dường như nếu bạn cài đặt Alamofire bằng Cocoapods, vấn đề này không xảy ra. –

0

tôi kéo lên một dự án với AF và ở đây bạn đi:

Alamofire.request(.POST, someRequest).responseJSON { (request, response, result) -> Void in 


    } 

Hình như nó chỉ là 3 thông số cho đóng, yêu cầu, trả lời & đối tượng kết quả. Tôi tưởng tượng điều này là bởi vì điều này sẽ là một cái gì đó mà ném trong Swift 2.0.

0

Sử dụng Alamofire-SwiftyJSON việc xử lý lỗi là như nhau:

.responseSwiftyJSON({ (request, response, json, error) -> Void in 
    if let error = error { 
     print("Received error \(error)") 
     return 
    } 
    else { 
     print("Received json response \(json)") 
    } 
} 

nhưng bây giờ error là một ErrorType thay vì một NSError.

Sử dụng đơn giản Alamofire và iOS JSON, phản ứng và lỗi được thống nhất trong kết quả của loại Result<AnyObject>, bạn phải unwrap kết quả:

.responseJSON { request, response, result in 
    switch result { 
    case .Success(let value): 
     print("Received response \(value)") 
    case .Failure(_, let error): 
     print("Received error \(error)") 
    } 
2

Cũ cú pháp:

Alamofire.request(req).responseJSON() { 
    (request, response, data, error) in 
    // .... 
} 

cú pháp mới :

Alamofire.request(req).responseJSON() { 
    response in 
    if response.result.isSuccess { 
    let data = response.result.value 
    // .... 
    } 
} 
Các vấn đề liên quan