为什么只有类的协议不满足协议扩展where子句中的AnyObject约束?

时间:2015-09-25 14:49:23

标签: swift inheritance

我定义了协议:

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'。

1 个答案:

答案 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协议或任何其他协议。