将特性映射到Swift中的另一个对象
假设我有一个这样的结构将特性映射到Swift中的另一个对象,swift,Swift,假设我有一个这样的结构 struct MyStruct: Codable { var bool1: Bool? = false var bool2: Bool var whateverElse: Date var andThis: String? } 现在struct有大约30个属性,我需要不时地添加更多属性 在应用程序逻辑的一部分中,我需要从同一结构的另一个实例中仅重置布尔属性,因此我有一个类似这样的无聊方法: func resetToValues(_ from: MyStr
struct MyStruct: Codable {
var bool1: Bool? = false
var bool2: Bool
var whateverElse: Date
var andThis: String?
}
现在struct有大约30个属性,我需要不时地添加更多属性
在应用程序逻辑的一部分中,我需要从同一结构的另一个实例中仅重置布尔属性,因此我有一个类似这样的无聊方法:
func resetToValues(_ from: MyStruct) {
self.bool1 = from.bool1
self.bool2 = from.bool2
}
请注意,whateverels
和以及此
不会重置。
每次我添加一个属性时,我都必须为这个方法添加一行,这很烦人
是否有某种方法可以使其自动化,从而只重置Bool
和Bool?
属性
我想得到
CodingKeys
并对它们进行迭代,但不幸的是,因为我无法从Mirror.Child
中获得很多信息,也无法通过字符串获得KeyPath
,我陷入了无法确定Bool和not的困境。您可以使用魔法生成代码:
import Foundation
{% for type in types %}
extension {{type.name}} {
mutating func reset(with other: {{type.name}}) {
{% for variable in type.storedVariables %}
{% if variable.typeName|hasPrefix:"Bool" %}
self.{{variable}} = other.{{variable}}
{% endif %}
{% endfor %}
}
}
{% endfor %}
您可以使用巫术生成代码:
import Foundation
{% for type in types %}
extension {{type.name}} {
mutating func reset(with other: {{type.name}}) {
{% for variable in type.storedVariables %}
{% if variable.typeName|hasPrefix:"Bool" %}
self.{{variable}} = other.{{variable}}
{% endif %}
{% endfor %}
}
}
{% endfor %}