【问题标题】:Initialize property of type immutable dictionary in Swift init()在 Swift init() 中初始化不可变字典类型的属性
【发布时间】:2015-08-20 02:34:34
【问题描述】:

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

class MyClass {
    var images: [String: UIImage]

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

有没有办法用let 而不是var 语义来定义这个属性。这会很方便并且看起来很合适,因为它的内容在对象初始化后不会改变。 (如果我只是将这个 var 更改为 let 我目前收到循环内分配的此错误:“不可变值'self.images'可能未分配给”。)

【问题讨论】:

  • 只需先在局部变量中构建字典,然后分配给属性...
  • 也可以使用函数表达式一次性创建字典,但您需要分享有关计算的更多信息。

标签: swift initialization immutability swift2 access-control


【解决方案1】:

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
    }
}

【讨论】:

    【解决方案2】:

    如果在字典计算期间不需要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
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2020-07-14
      相关资源
      最近更新 更多