Swift 属性别名(可以说是最优雅的身份验证解决方案)

Swift 属性别名(可以说是最优雅的身份验证解决方案),swift,protocols,Swift,Protocols,如果我想遵守协议,并且协议定义了我不喜欢的属性名称,该怎么办? 例如: struct Currency: Identifiable { let id: String let rate: Double } 但在这种情况下,最好为“id”属性指定一个更有意义的名称。所以我希望能够做到这样: struct Currency: Identifiable { propertyalias iso = id let iso: String let rate: Doub

如果我想遵守协议,并且协议定义了我不喜欢的属性名称,该怎么办?
例如:

struct Currency: Identifiable {
    let id: String
    let rate: Double
}
但在这种情况下,最好为“id”属性指定一个更有意义的名称。所以我希望能够做到这样:

struct Currency: Identifiable {
    propertyalias iso = id
    let iso: String
    let rate: Double
}

没有所谓的“财产别名”

但是,可以将该属性包装在计算属性中,并根据需要命名该属性

struct Currency: Identifiable {
    let iso: String
    let rate: Double

    var id: String { 
        iso
    }
}

没有所谓的“财产别名”

但是,可以将该属性包装在计算属性中,并根据需要命名该属性

struct Currency: Identifiable {
    let iso: String
    let rate: Double

    var id: String { 
        iso
    }
}

Swift 5.2+解决方案
灵感来自

协议MyIdentified:可识别{
关联类型ID
静态变量idKey:KeyPath{get}
}
可识别扩展名{
变量id:id{
self[keyPath:self.idKey]
}
}
结构货币:myc{
静态let idKey=\Self.iso
让iso:字符串
出租率:双倍
}

Swift 5.2+解决方案
灵感来自

协议MyIdentified:可识别{
关联类型ID
静态变量idKey:KeyPath{get}
}
可识别扩展名{
变量id:id{
self[keyPath:self.idKey]
}
}
结构货币:myc{
静态let idKey=\Self.iso
让iso:字符串
出租率:双倍
}

您的最佳选择可能是在计算属性中包装
id
。您的最佳选择可能是在计算属性中包装
id