在 Swift init() 中初始化 属性 类型的不可变字典

Initialize property of type immutable dictionary in Swift init()

我想通过计算 init() 中的值来初始化不可变字典。我目前有:

class MyClass {
    var images: [String: UIImage]

    func init() {
        images = [:]
        for // ... loop over strings
            // ... calculate image
            images[string] = image
    }
}

有什么方法可以用 let 而不是 var 语义来定义此 属性。这会很方便并且看起来很合适,因为它的内容在对象初始化后不会改变。 (如果我只是将此 var 更改为 let,我目前会收到此循环内赋值错误:"immutable value 'self.images' may not be assigned to"。)

init中创建一个附加变量并将其赋值一次给images:

class MyClass {
    let images: [String: UIImage]

    func init() {
        var tempImages = [String: UIImage]()
        for // ... loop over strings
            // ... calculate image
            tempImages[string] = image

        // assign tempImages to images
        images = tempImages
    }
}

如果在字典计算期间不需要self,另一种选择是使用初始化块。

class MyClass {

    let images: [String: UIImage] = {
        var images = [String: UIImage]()
        images["foo"] = UIImage(named: "foo")
        images["bar"] = UIImage(named: "bar")
        return images
    }()

    // no explicit init required

}