Flu*_*ity 3 struct properties let lazy-initialization swift
我有一个我正在使用的不可变结构,我正在尝试创建一个不是计算值的属性,但是它的赋值需要先前分配的属性的值.
(哇满口).
我正在努力的财产是 perimeter: Int
// Floor made out of square tiles.
struct Floor {
let
size: (x: Int, y: Int), // How many tiles in the floor
tilePerimeter: Int,
// Calculate entire floor's perimeter based on tile quantity and perimeter:
lazy let perimeter: Int = {
let
t4th = self.tilePerimeter / 4, // Tile width / length
sx = self.size.x * t4th, // All X tiles' length
sy = self.size.y * t4th // All Y tiles' width
return (sx * 2) + (sy * 2) // Perimeter calc
}()
};
Run Code Online (Sandbox Code Playgroud)
不幸的是,Swift不会让我使用lazy let
..所以我的解决方法是var
只使用一个getter 进行计算...但是如果这个计算需要很长时间(加载一个图像或复杂的数学)那么它将被称为许多时间,真的只需要拨打一次
所以我的实际解决方法是创建一个初始化器并在那里分配周边...只有我的一些结构具有许多属性,而不是为结构创建初始化器是我喜欢的Swiftiness的一部分.
我知道我可以将它作为一个lazy var
并实例化结构let
,但这似乎令人困惑且容易出错.
有没有办法做到这一点,我可以保持不变性,性能和迅捷?而且,不允许使用的原因是什么lazy let
?
也许你可以使用lazy var
毕竟:
lazy private(set) var perimeter: Int = {
...
}()
Run Code Online (Sandbox Code Playgroud)
一个只读 var
让你更接近所需的let
语义.
归档时间: |
|
查看次数: |
587 次 |
最近记录: |