我正在尝试编写一个小协议来使 Type 能够拥有子级,但我遇到了所示的错误。
注释掉所示的“幼稚”位仍然会导致错误。编译器不认为我的 Typealias 使结构符合,因为在修复它时它会尝试添加另一个类型别名。
protocol P {
associatedtype C where C:Identifiable//, C:P
var id: UUID { get set }
// var c: [ C ]{ get set }
}
struct TestCanHaveChildren: P { // Type 'TestCanHaveChildren' does not conform to protocol 'P'
typealias C = Self
var id = UUID()
// var c: [ TestCanHaveChildren ]
}
问题是你的
TestCanHaveChildren
不符合Identifiable
。如果您希望协议 P
中的关联类型也符合 P
,您最终可能会得到如下所示的结果。
protocol P {
associatedtype C where C: Identifiable & P
var id: UUID { get set }
var c: [ C ]{ get set }
}
struct TestCanHaveChildren: Identifiable, P {
typealias C = Self
var id = UUID()
var c: [ TestCanHaveChildren ]
}