在 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
}
我想通过计算 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
}