在 Swift 中,当我声明一个非可选的 属性 但不能保证初始化时,我是否会丢失任何资源?

In Swift, am I losing any resources when I declare a non-optional property but initialization isn't guaranteed?

所以我正在使用两个属性,一个是数组,一个是 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)
...
}

我的问题是:

  1. 显式声明这些属性是否占用任何资源,如果占用,占用多少资源?
  2. 我使用的 syntax/approach 初始化是否正确(尤其是数组)?
  1. 是的,但只是非常小的数量——不值得考虑。

  2. 我不知道你所说的 "initialization" 或 "correct" 是什么意思。两者都被隐式初始化为 nil 只是通过声明为 var 可选。 (在 Swift、 只有 var 选项得到隐式初始化的这种特殊处理。)你说 "and I can only initialize them later" 但实际上你稍后做的是 初始化;您只是将 nil 值替换为不同的值。

    至于"correct",能编译就一定是"correct"。但是,更广泛地说,我想我明白了 为什么 您要延迟分配这些值直到 viewDidLoad,并且 完全 正确:使用可选以便您稍后可以在 viewDidLoad 中提供值是 Swift iOS 编程中常见且正确(且重要)的模式。