2015-11-05 20 views
41

Tôi đang sử dụng Alamofire để xử lý mạng nhanh và chạy vào một lỗi lạ. Có vẻ như chúng tôi không thể vượt qua Phương thức enum làm thông số.
[Lỗi là về Phương pháp tham số]'Phương thức' không rõ ràng để tra cứu kiểu trong ngữ cảnh này, Lỗi trong Alamofire

enter image description here

private func apiRequest(method: Method, url: String, apiData: [String : AnyObject], completion:(finished: Bool, response: AnyObject?) ->Void) { 

    Alamofire.request(method, url, parameters: apiData).responseJSON{ response in 
     if let JSON = response.result.value { 
      completion(finished: true, response: JSON) 
     } else { 
      completion(finished: false, response:nil) 
     } 
    } 
} 
+1

Sử dụng tên đủ điều kiện, ví dụ: 'Alamofire.Method' nếu có xung đột tên. Bạn đã làm điều đó cho hàm 'request'. – Sulthan

Trả lời

60

Bạn cần phải xác định mô-đun mà từ đó để tra cứu loại đối tượng. Gọi Alamofire.Method

10

Có thể có xung đột tên. Để giải quyết, bạn có thể sử dụng tên đủ điều kiện của enum (bao gồm tên mô-đun):

private func apiRequest(method: Alamofire.Method, ... 
0

Trong khi câu trả lời cho điều này đã khắc phục lỗi xây dựng; trong trường hợp của tôi, tệp hiển thị cảnh báo nằm trong hai khung công tác khác nhau nên Xcode không biết phải tìm đâu. Đây không phải là hành vi dự định của các khuôn khổ nội bộ của chúng tôi vì vậy tôi chỉ cần xóa bản sao mà tôi không muốn nữa.

1

Bạn có thể có một lớp được khai báo ở hai hoặc nhiều địa điểm trong ứng dụng của bạn. Lỗi này nói rằng không có cách nào kết hợp để sử dụng lớp này bởi vì có một vài vị trí khác nhau trong mã mà nó được khai báo.

3

Tôi cũng đã gặp phải vấn đề này, bởi vì tôi đã công bố một số cùng tên của giao thức:

protocol SomeProtocol { 
    static func someTypeMethod() 
} 

protocol SomeProtocol { 
    init(someParameter: Int) 
} 

protocol SomeProtocol { 
    var mustBeSettable: Int { get set } 
    var doesNotNeedToBeSettable: Int { get } 
} 
0

Loại Method được khai báo trong hai mô-đun nhập khẩu. Bạn phải chỉ định mô-đun để sử dụng loại đó. Sử dụng Alamofire.Method thay vì Method.

Mẹo: Nếu bạn đang sử dụng loại thường, bạn có thể tạo một loại bí danh trong mô-đun của bạn (ứng dụng):

typealias Method = Almofire.Method 

Bằng cách đó bạn sẽ không cần phải thêm tiền tố loại với Almofire. nữa .

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