我有两个具有相同字段的结构。合并它们的最佳方法是什么。
struct Type1{
var variable1:String?
var variable2:Double?
var variable3:String?
var notImporant:String?
}
struct Type2{
var variable1A:String?
var variable2A:String?
var variable3A:String!
}
Run Code Online (Sandbox Code Playgroud)
什么是转换的最佳方式type2来type1?我从 API 获得返回并使用 codable 解析它,但有两个不同的结构,我需要获取一个结构。数据是相同的,只是在类型方面映射不同。一些结构有更多的信息,而另一些则有更少的信息。
只需在两个结构中创建一个复制构造函数,如下所示:
struct Type2 {
var variable1A:String?
var variable2A:String?
var variable3A:String!
init(_ otherType: Type1) {
variable1A = otherType.variable1
variable2A = otherType.variable2
variable3A = otherType.variable3
}
}
Run Code Online (Sandbox Code Playgroud)
您不能强制转换两个不相关的结构。您可以做的是为它们两个定义一个通用协议,并在您不关心它是哪个底层对象的地方使用它们。
protocol CommonProtocol {
var variable1: String? { get }
var variable3: String? { get }
}
struct Type1: CommonProtocol {
var variable1:String?
var variable2:Double?
var variable3:String?
var notImporant:String?
}
struct Type2: CommonProtocol {
var variable1A:String?
var variable2A:String?
var variable3A:String!
}
Run Code Online (Sandbox Code Playgroud)
然后,无论您目前在哪个地方使用 atype1而不是 a type2,让该函数只接受 a CommonProtocol,您都可以使用。
请注意,虽然您的两种类型都有 a variable2,但其中一个是Double?while 另一个是 a String?。有几种不同的方法可以解决这个问题,我留给你。我只是把它排除在协议之外。
另一方面,将结构体 ( Type1, Type2)的名称大写是 Swift 的标准。在某些情况下,如果你不这样做,你可能会遇到问题,所以我建议你这样做。
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |