如何设置计算属性的值
问题描述:
我想将值设置为类型dictionary的计算属性中的键。我想要做这样的事情:如何设置计算属性的值
class Foo {
var dict: [String: String] {
dict["a"] = "b"
}
}
然而,这并没有编译。
无法通过下标分配:“快译通”是一个GET-唯一的财产
我可以做这样的事情,但它是一个有点冗长:
class Foo {
var values: [String: String] {
var tempValues = [String: String]()
tempValues["a"] = "b"
return tempValues
}
}
有没有更好的办法这样做?对于上下文,我想实现的是在默认情况下dict
在基类中是一个空的[String: String]()
,并且当我重写子类中的属性时,我想将值分配给所述字典。
答
当我重写子类中的属性时,我想将值分配给所述字典。
EHH ......只要做到这一点:
class A {
var dict: [String: String] {
return [:]
}
}
class B: A {
override var dict: [String : String] {
return ["Hello":"Hi"]
}
}
你忘了override
关键字?
答
语法
var dict: [String: String] {
dict["a"] = "b"
}
为
var dict: [String: String] {
get {
dict["a"] = "b"
}
}
其指示只读属性的缩写形式。
您需要添加set
之三
var dict: [String: String] {
get {
return [:]
}
set {
dict["a"] = "b"
}
}
但要小心,你很容易碰到一个无限循环,当你调用自身的setter(它确实在这个例子中)。
实际上这种计算属性只有在您要映射另一个值时才有用。
这是有道理的,但我越来越挂在'返回[“你好”:“嗨”]'。如果说你有'C级',你会如何修改字典? – Aaron
@Aaron和你在'B'完全一样,只是改变返回值。 – Sweeper
对,但是到底是什么?如果在我覆盖之前有20个k-v对,它不会让我分配'food [“bar”] =“baz”'。 – Aaron