我的类可以在 Swift 中重写协议属性类型吗?

2024-04-30

protocol Parent {
     var children: [AnyObject] { get set }
}

class Foo {
}

class Bar: Parent { //error happens here
    var children = [Foo]()

    init() {}
}

我收到错误“类型‘Object’不符合协议‘Parent’。我收到此错误的原因是因为我将孩子定义为 Foo 而不是 AnyObject 的数组。有什么方法可以使这项工作正常进行吗?


协议中要求 AnyObject 意味着children array must能够接受AnyObject条目。但听起来你想要Bar的孩子只能Foo对象。

相反,您可以给协议一个关联类型 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html#//apple_ref/doc/uid/TP40014097-CH26-ID189:

protocol Parent {
    associatedtype Child
    var children: [Child] { get set }
}

class Foo { }

class Bar: Parent {
    var children = [Foo]()
    init() {}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的类可以在 Swift 中重写协议属性类型吗? 的相关文章

随机推荐