如何在计算属性

时间:2016-09-13 18:16:15

标签: ios swift dictionary properties

我想为字典类型的计算属性中的键设置一个值。我想做这样的事情:

class Foo {
    var dict: [String: String] {
        dict["a"] = "b"
    }
}

然而,这并没有编译。

  

不能通过下标分配:' dict'是一个只获得属性

我可以做这样的事情,但它有点冗长:

class Foo {
    var values: [String: String] {
        var tempValues = [String: String]()
        tempValues["a"] = "b"
        return tempValues
    }
}

有更好的方法吗?对于上下文,我想要实现的是默认情况下dict在基类中为空[String: String](),当我覆盖子类中的属性时,我想为所述字典赋值。

2 个答案:

答案 0 :(得分:1)

语法

var dict: [String: String] {
    get {
        dict["a"] = "b"
    }
}

的缩写形式
set

表示只读属性。

您需要添加var dict: [String: String] { get { return [:] } set { dict["a"] = "b" } } ter

AsyncTask

但是要小心,当你自己调用setter时你很容易遇到无限循环(在这个例子中它就是这样)。

实际上,这种计算属性仅在您要映射另一个值时才有用。

答案 1 :(得分:0)

  

当我覆盖子类中的属性时,我想为所述字典赋值。

呃......就这么做:

class A {
    var dict: [String: String] {
        return [:]
    }
}

class B: A {
    override var dict: [String : String] {
        return ["Hello":"Hi"]
    }
}

您是否忘记了override关键字?