簡體   English   中英

如何在計算屬性上設置值

[英]How to set a value on computed property

我想為字典類型的計算屬性中的鍵設置一個值。 我想做這樣的事情:

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]() ,當我覆蓋子類中的屬性時,我想為所述字典分配值。

語法

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時,您很容易陷入無限循環(在此示例中就是如此)。

實際上,這種計算屬性僅在要映射另一個值時才有用。

當我重寫子類中的屬性時,我想為所述字典分配值。

嗯...就做吧:

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

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

您是否忘記了override關鍵字?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM