【发布时间】:2017-03-02 17:09:34
【问题描述】:
为什么下面的代码会报错?
protocol ProtocolA {
var someProperty: ProtocolB { get }
}
protocol ProtocolB {}
class ConformsToB: ProtocolB {}
class SomeClass: ProtocolA { // Type 'SomeClass' does not conform to protocol 'ProtocolA'
var someProperty: ConformsToB
init(someProperty: ConformsToB) {
self.someProperty = someProperty
}
}
The answer in this similar question 有道理。但是,在我的示例中,该属性是 get-only。为什么不应该这样做?是 Swift 的一个缺点,还是有什么原因?
【问题讨论】:
-
感谢您的链接。这很不幸,但很高兴知道!
-
如果你想要这种行为,在
ProtocolA你应该有associatedtype T: ProtocolB然后声明var someProperty: T { get } -
在此期间它可以作为一种解决方法,直到它(希望)被修复,但我真的很犹豫添加一个关联类型,因为这会将这些知识冒泡到对象图的其余部分,很快就会失控。
-
从 Swiftt 5.1 开始,您可以将不透明返回类型与关联类型结合使用,以避免它们在对象图中冒泡。
-
@IliasKarim 你能把它添加为答案吗?
标签: swift swift-protocols