协议不能被继承的原因



下面是我的代码:

protocol base{}
protocol sub: base{}
protocol SomeProtocol{
var a: base{get}
}
struct SomeStruct: SomeProtocol{
//    var a: base
var a: sub
}

当我使用var a: sub在Struct,我得到一个错误:

类型'SomeStruct'不符合协议'SomeProtocol'

我想知道var a: sub应该符合基本协议,但为什么Swift不能这样写?有更好的计划吗?

一致性类型的问题也适用于派生协议。这里列出的变通方法在您的代码中看起来像这样:

protocol SomeProtocol {
associatedtype A: Base
var a: A { get }
}
struct SomeStruct<A: Sub>: SomeProtocol {
var a: A
}
protocol SomeProtocol {
var a: any Base { get }
}
struct SomeStruct: SomeProtocol {
var _a: any Sub
var a: any Base { _a }
}

相关内容

  • 没有找到相关文章

最新更新