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)