2017-01-26 13 views
5

Thêm nhiều đại biểu thay vì chỉ một đại biểu là một nhiệm vụ khá phổ biến. Giả sử chúng ta có giao thức và một lớp:Sử dụng NSHashTable để triển khai mẫu Observer trong Swift 3

protocol ObserverProtocol 
{ 
    ... 
} 

class BroadcasterClass 
{ 
    // Error: Type 'ObserverProtocol' does not conform to protocol 'AnyObject' 
    private var _observers = NSHashTable<ObserverProtocol>.weakObjects() 
} 

Nếu chúng ta cố gắng ép buộc ObserverProtocol cho phù hợp AnyObject giao thức, chúng tôi sẽ nhận được một lỗi:

Using 'ObserverProtocol' as a concrete type conforming to protocol 'AnyObject' is not supported

Là nó thậm chí có thể tạo ra một tập hợp các đại biểu yếu trong Swift 3.0?

Trả lời

6

Chắc chắn, có thể.

AnyObject là tương đương với Swift của id trong Objective C. Để có được mã của bạn để biên dịch, bạn chỉ cần thêm chú thích để @objc giao thức của bạn, để nói Swift rằng giao thức phải phù hợp với Objective C.

Vì vậy:

@objc protocol ObserverProtocol { 

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