Swift - 仅将非零属性从一个结构复制到另一个结构
Swift - copy only non-nil properties from one Struct to another
我正在尝试将值 JSON 已解码的 Firebase RemoteConfig 的新值结构复制到另一个相同类型的本地实例。显然它替换了新对象的所有旧值,但我只想替换具有非零的属性,因此本地 属性 将保留它们的默认值。
例如:
struct Config {
let port: Int
let details: String?
}
var localConfig = Config(port: 80, details: "Default configuration")
var remoteConfig = Config(port: 100, details: nil)
/// Here I want to copy only those properties are not nil
/// otherwise leave its default value
localConfig = remoteConfig
print (localConfig)
print (remoteConfig)
显然,我可以检查每个 属性 是否为 nil 并单独分配,但如果结构庞大且复杂,这并不容易。我只是想知道 Swift 中是否有任何标准选项可以实现此目的。
怎么样:
struct Config {
var port: Int
var details: String?
mutating func patch(with remote: Config){
self.port = remote.port
self.details = remote.details ?? self.details
}
}
用法:
var local = Config(port: 2, details: "myDetail")
var remote = Config(port: 3, details: nil)
local.patch(with: remote)
我正在尝试将值 JSON 已解码的 Firebase RemoteConfig 的新值结构复制到另一个相同类型的本地实例。显然它替换了新对象的所有旧值,但我只想替换具有非零的属性,因此本地 属性 将保留它们的默认值。
例如:
struct Config {
let port: Int
let details: String?
}
var localConfig = Config(port: 80, details: "Default configuration")
var remoteConfig = Config(port: 100, details: nil)
/// Here I want to copy only those properties are not nil
/// otherwise leave its default value
localConfig = remoteConfig
print (localConfig)
print (remoteConfig)
显然,我可以检查每个 属性 是否为 nil 并单独分配,但如果结构庞大且复杂,这并不容易。我只是想知道 Swift 中是否有任何标准选项可以实现此目的。
怎么样:
struct Config {
var port: Int
var details: String?
mutating func patch(with remote: Config){
self.port = remote.port
self.details = remote.details ?? self.details
}
}
用法:
var local = Config(port: 2, details: "myDetail")
var remote = Config(port: 3, details: nil)
local.patch(with: remote)