2014-12-06 25 views
5

Mã của tôi thực sự đơn giản.Không thể gọi phương thức nhập trên lớp phù hợp với giao thức

giao thức của tôi:

protocol BaseEntity 
{ 
    class func getInstance(sourceObject: [NSObject : AnyObject], context: AnyObject!) -> BaseEntity 
    init() 
} 

Sau đó, trong một lớp khác tôi có phương pháp này:

private func convertJSONDictionaryIntoModel(jsonDictionary : [NSObject : AnyObject], mapClass: BaseEntity.Type) -> BaseEntity 
{ 
    let object = mapClass.getInstance(jsonDictionary, context: nil) 

    return object 
} 

tôi nhận được một lỗi biên dịch trên dòng đầu tiên mà đọc là "thành viên truy cập của giao thức giá trị kiểu BaseEntity .Type is unimplemented "

Theo như tôi có thể nói, điều này có thể xảy ra trong Swift.

Trả lời

0

Tôi vừa gặp phải điều này! Điều này có nghĩa là ngôn ngữ lập trình Swift không hỗ trợ các phương thức lớp bên trong các giao thức .... Cách giải quyết cho điều này dường như phụ thuộc vào tình hình cụ thể và không có "bạn nên làm điều này để thay thế". Nếu có ai có giải pháp tốt hơn, hãy chia sẻ!

Đây cũng là trường hợp có biến lớp, tuy nhiên, có hacky workaround for that.

+0

Thật không may, tôi không thể tìm thấy giải pháp nào cho điều này. Cách duy nhất tôi có thể làm cho nó chấp nhận nó là bằng cách sử dụng Generics, nhưng Generics có những hạn chế riêng của họ quá. Những loại vấn đề này khiến tôi thực sự nghĩ rằng ngôn ngữ không đầy đủ. Mục đích của họ là làm mọi thứ dễ dàng hơn và rõ ràng hơn ... cũng đoán xem nếu họ không hỗ trợ những thứ như thế này và người ta phải dựa vào một số cách giải quyết như cách bạn vạch trần, điều đó khá là hơi say. – mdonati

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