我有两个具有相同字段的结构。合并它们的最佳方法是什么。
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!
}
将type2
转换为type1
的最佳方式是什么?我从API返回并使用可编码解析它,但有两个不同的结构,我需要得到一个结构。数据是相同的,它只是在类型方面有不同的映射。一些结构具有更多信息而其他结构具有更少信息。
答案 0 :(得分:3)
只需在两个结构中创建一个复制构造函数,如下所示:
struct Type2 {
var variable1A:String?
var variable2A:String?
var variable3A:String!
init(_ otherType: Type1) {
variable1A = otherType.variable1
variable2A = otherType.variable2
variable3A = otherType.variable3
}
}
答案 1 :(得分:3)
你不能施放两个不相关的结构。您可以做的是为它们中的两个定义一个公共协议,并在不关心它是哪个底层对象的地方使用它们。
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!
}
然后,在您目前使用type1
而不是type2
的任何地方,让该功能只接受CommonProtocol
,您可以使用其中任何一个。
请注意,虽然您的两种类型都有variable2
,但其中一种是Double?
而另一种是String?
。我可以通过几种不同的方式来解决这个问题。我把它从协议中删除了。
另一方面,它是Swift标准,用于大写结构名称(Type1
,Type2
)。在某些情况下,如果你不这样做,你可能会遇到问题,所以我建议你这样做。