我定义了协议:
protocol MyProtocol: class {
}
class MyClass: MyProtocol {
}
仅适用于具有类元素的集合:
extension CollectionType where Generator.Element: class {
func someFunc() {
}
}
var items = [MyClass]()
items.someFunc() // someFunc is available
var strings = [String]()
// strings.someFunc() is not available because String is not class
但这不会编译,我将扩展名定义更改为:
extension CollectionType where Generator.Element: AnyObject {
...
}
它也无法编译,因为MyProtocol
不符合AnyObject
。
所以我将MyProtocol
的定义更改为:
protocol MyProtocol: AnyObject {
}
它也不会使用消息进行编译:
输入' MyProtocol'不符合协议' AnyObject'。
答案 0 :(得分:0)
经过一番研究后,我发现here协议类型不符合协议:
extension CollectionType where Generator.Element : First {
func someFunc() {
}
}
protocol First {
}
protocol Second: First {
}
var items = [Second]()
items.someFunc() // Type 'Second' does not conform to protocol 'First'
因此,在我的情况下,真正的问题不是只有类的协议不满足AnyObject
约束,而是协议类型不能符合AnyObject
协议或任何其他协议。