【发布时间】:2021-02-16 08:16:19
【问题描述】:
我有两种不同的类型,它们代表相同的数据,并且具有完全相同的“形状”。这两种不同的类型是代码生成的,我不得不处理它们。但是,我想让它们符合一个通用协议,以便我可以将这两种类型视为相同。这是一个例子:
假设这是我的两种代码生成类型,我一直坚持:
struct User1 {
var email: String
var name: Name
struct Name {
var givenName: String
var familyName: String
}
}
struct User2 {
var email: String
var name: Name
struct Name {
var givenName: String
var familyName: String
}
}
我希望能够互换使用这些类型,因此我创建了一些它们可以遵循的协议:
protocol NameRepresenting {
var givenName: String { get }
var familyName: String { get }
}
protocol UserRepresenting {
var email: String { get }
var name: NameRepresenting { get }
}
然后我尝试让它们符合:
extension User1.Name: NameRepresenting {}
// Error: Type 'User1' does not conform to protocol 'UserRepresenting'
extension User1: UserRepresenting {}
extension User2.Name: NameRepresenting {}
// Error: Type 'User2' does not conform to protocol 'UserRepresenting'
extension User2: UserRepresenting {}
我希望上述方法可以工作,但编译失败并出现上述错误。有什么优雅的方法可以让这两种类型符合一个通用协议,以便我可以互换使用它们?
【问题讨论】:
标签: swift swift-protocols