2015-04-24 14 views
11

Tôi đang sử dụng AFNetworking trong một dự án Swift.lỗi đóng dấu typealias trong swift

1 - Typealias việc đóng cửa:

typealias successBlock = (AFHTTPRequestOperation! ,AnyObject!)-> Void 
typealias failureBlock = (AFHTTPRequestOperation, NSError!) -> Void 

2 - Xác định chức năng:

func getUserInfo(success: (successBlock)!, failure: (failureBlock)!) { 
    let path = "https://api.wei.s.json" 
    let parameters = ["source":"key"] 
    self.GET(path, parameters: parameters, success: success, failure: failure) 
} 

3 - Lỗi:

Cannot invoke 'GET' with an argument list of type '(String,parameters: [String : String], success: (successBlock)!, failure: (failureBlock)!)'

Cảm ơn sự giúp đỡ nào.

Chỉ cần nạp:

typealias failureBlock = (AFHTTPRequestOperation, NSError!) -> Void 

để

typealias failureBlock = (AFHTTPRequestOperation!, NSError!) -> Void 
+0

Điều gì sẽ xảy ra khi bạn xóa dấu ngoặc đơn khỏi '(successBlock)! '? – Clashsoft

+0

có thể là do AFNetworking là một thư viện Objective-C, nó không thích kiểu 'String' nhanh chóng cho các tham số 'đường dẫn' và 'tham số' đối với phương thức GET. Có thể tốt hơn nếu sử dụng phiên bản AFNetworking nhanh được gọi là AlamoFire để bạn không gặp phải các loại vấn đề này trong tương lai. – dean

+0

@Clashsoft cùng lỗi. –

Trả lời

5

Tôi nghĩ rằng bạn đang thiếu một! trên định nghĩa typealias failureBlock nó đang mong đợi một AFHTTPRequestOperation tùy chọn chưa được khai báo rõ ràng không phải là một AFHTTPRequestOperation chuẩn thực sự là các kiểu khác nhau. Tôi tin rằng nó phải là,

typealias failureBlock = (AFHTTPRequestOperation!, NSError!) -> Void 
+0

cũng ẩn hoàn toàn các tham số đầu vào của phương thức có vẻ như một chút cờ đỏ với tôi, hoặc chuyển qua tùy chọn và sử dụng lệnh if để unwrap chúng và gọi GET nếu chúng ở đó và xử lý trường hợp khi chúng không xuất hiện hoặc làm cho chúng không bắt buộc. –

1

Hãy thử rằng:

func getUserInfo(success: (successBlock)!, failure: (failureBlock)!) { 
    let path = "https://api.wei.s.json" 
    let parameters = ["source":"key"] 
    self.GET(path, parameters: parameters, success: success!, failure: failure!) 
} 

(Lưu ý các "bang" hai trên sự thành công luận và suy

!.

Điều đó dựa trên giả định rằng hàm GET mong đợi một đóng và không phải là một tham chiếu tùy chọn cho một đóng. Nó có thể là nó. Nếu không, hãy sử dụng tổ hợp phím để hoàn thành phương thức trên self.GET và xem loại Swift mong đợi. Nó sẽ cho bạn biết nơi có vấn đề.

Các vấn đề liên quan