所以我正在使用两个属性,一个是数组,另一个是 Realm 的自定义容器类型,称为 Results
(其行为类似于 List<T>
):
var rowHeights: [CGFloat?]!
var myResults: Results<ChildObject>!
在这两种情况下,我都需要全局声明它们,我只能稍后在 viewWillAppear()
中初始化它们,这意味着从技术上讲,就 Swift 而言,无法保证初始化:
override func viewWillAppear(_ animated: Bool) {
...
myResults = myParentObject.children.sorted(byKeyPath: "childPath", ascending: true)
...
rowHeights = Array(repeating: nil, count: myParentObject.children.count)
...
}
我的问题是:
- 显式声明这些属性是否占用任何资源,如果占用,占用多少?
- 我使用的初始化语法/方法是否正确(尤其是数组)?
最佳答案
是的,但只是非常小的数量——不值得考虑。
我不知道您所说的“初始化”或“正确”是什么意思。两者都被隐式初始化为
nil
只是通过声明为var
可选。 (在 Swift 中,只有var
Optionals 得到这种隐式初始化的特殊处理。)你说“我只能稍后初始化它们”但实际上你稍后做的是 < em>不初始化;您只是将nil
值替换为不同的值。至于“正确”,编译就一定“正确”。但是,更广泛地说,我想我明白为什么你要延迟分配这些值直到
viewDidLoad
,而且它是完全正确的:使用一个 Optional 这样您可以稍后在viewDidLoad
中提供一个值,这是 Swift iOS 编程中常见且正确(且重要)的模式。
关于ios - 在 Swift 中,当我声明一个非可选属性但不能保证初始化时,我是否会丢失任何资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42057815/