尝试将协议与关联类型一起使用

问题描述 投票:0回答:1

我正在尝试编写一个小协议来使 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 ]
}
swift swift-protocols
1个回答
0
投票

问题是你的

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 ]
}
© www.soinside.com 2019 - 2024. All rights reserved.