gpt4 book ai didi

Swift Dictionary - 在 setter 函数中更新值

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:15 25 4
gpt4 key购买 nike

我的代码看起来有点像:

协议(protocol)

protocol MyProtocol: class {
var featureConfigs: [String: Any]? { get set }
}

基类

class MyBaseClass: MyProtocol {
var featureConfigs: [String : Any]? {
get {
return nil
}
set {
self.featureConfigs = newValue
}
}
}

子类

class MySubclass: MyBaseClass {
override var featureConfigs: [String : Any]? {
get {
return ["feature-specific-configuration":""]
}
set {
self.featureConfigs = newValue
}
}
}

我希望能够更新存储在 featuresConfig 中的值。我知道执行 self.featureConfigs = newValue 会导致无限循环,但我不确定如何正确更新 featuresConfig 字典。我已经阅读并尝试了一些关于 Subscript 的东西,但我也无法让它工作。有什么建议吗?

最佳答案

为了能够为您的 featureConfigs 设置持久值,它需要是一个存储的属性,而不是一个计算的属性(这也可以是您创建的私有(private)支持变量此任务,作为 @AMomchilov says )。然后,您可以使用 willSetdidSet 来观察变化。

在您的子类中,您可以使用计算的属性覆盖存储的属性声明,以便在访问字典时更新给定的值-键对,使用 super 以便引用父类(super class)的存储属性。

例如:

protocol MyProtocol: class {
var featureConfigs: [String: Any]? { get set }
}


class MyBaseClass: MyProtocol {
var featureConfigs: [String : Any]? { // stored property with setter observers
willSet {
print("about to be set")
}
didSet {
print("was set")
}
}
}


class MySubclass: MyBaseClass {
// calculated property that forwards to super's stored property
override var featureConfigs: [String : Any]? {
get {
// injects the updated value of a given key when accessing
guard var config = super.featureConfigs else {return nil}
config["feature-specific-configuration"] = "baz"
return config
}
set {
super.featureConfigs = newValue
}
}
}

let s = MySubclass()

s.featureConfigs = ["foo":"bar"]
print(s.featureConfigs) // Optional(["feature-specific-configuration": "baz", "foo": "bar"])

关于Swift Dictionary - 在 setter 函数中更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37661556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com