我想通过计算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'可能不会分配给”。)
答案 0 :(得分:2)
在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
}
}
答案 1 :(得分:1)
如果在字典计算期间不需要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
}