public protocol Subscriber : class {
}
public struct Subscription {
private weak var subscriber:AnyObject<Subscriber>? = nil
}
爲什麼我不能使用AnyObject
這個var的協議?不能特殊的非泛型類型AnyObject
public protocol Subscriber : class {
}
public struct Subscription {
private weak var subscriber:AnyObject<Subscriber>? = nil
}
爲什麼我不能使用AnyObject
這個var的協議?不能特殊的非泛型類型AnyObject
Swift不允許以Objective-C的方式組合一個類型和一個協議,儘管你可以指定一組協議。由於AnyObject
實際上是一個協議,你可以完成你想通過寫作表達上面什麼:
public struct Subscription {
private weak var subscriber:protocol<Subscriber, AnyObject>? = nil
}
這需要subscriber
順應Subscriber
和AnyObject
協議雙方。
在你的情況上面,你其實並不因爲你所做的Subscriber
協議class
協議基本上保證所有符合的類型也是AnyObject
需要AnyObject
部分。所以,你可以這樣寫:
public struct Subscription {
private weak var subscriber:Subscriber? = nil
}
但protocol<Subscriber, AnyObject>
做法可讓您的用戶協議並不只限於類類型,同時使僅限於實現Subscriber
類類型的具體subscriber
弱變種。
要引用符合協議的對象,請使用協議。斯威夫特是不喜歡的Objective-C,你需要指定id<SomeProtocol>
:
public struct Subscription {
private weak var subscriber: Subscriber? = nil
}
您還可以,如果你想限制使用AnyObject
宣告你的協議是這樣,而不是使用class
:
public protocol Subscriber : AnyObject {
// ...
}