下面是我的代码:
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 }
}