2016-04-26 52 views

回答

3

Swift不允許以Objective-C的方式組合一個類型和一個協議,儘管你可以指定一組協議。由於AnyObject實際上是一個協議,你可以完成你想通過寫作表達上面什麼:

public struct Subscription { 
    private weak var subscriber:protocol<Subscriber, AnyObject>? = nil 
} 

這需要subscriber順應SubscriberAnyObject協議雙方。

在你的情況上面,你其實並不因爲你所做的Subscriber協議class協議基本上保證所有符合的類型也是AnyObject需要AnyObject部分。所以,你可以這樣寫:

public struct Subscription { 
    private weak var subscriber:Subscriber? = nil 
} 

protocol<Subscriber, AnyObject>做法可讓您的用戶協議並不只限於類類型,同時使僅限於實現Subscriber類類型的具體subscriber弱變種。

2

要引用符合協議的對象,請使用協議。斯威夫特是不喜歡的Objective-C,你需要指定id<SomeProtocol>

public struct Subscription { 
    private weak var subscriber: Subscriber? = nil 
} 

您還可以,如果你想限制使用AnyObject宣告你的協議是這樣,而不是使用class

public protocol Subscriber : AnyObject { 
    // ... 
} 
相關問題