检查是否为零后强制展开?

Bri*_*een 5 swift

这样做是否被认为是不好的做法

我正在检查数组是否为零,然后强制展开以从数组中检索元素。我这样做是为了避免创建不必要的 if let 变量。

if self.arrayOfStrings != nil{
    textLabel.text = self.arrayOfStrings![0]
}
Run Code Online (Sandbox Code Playgroud)

rma*_*ddy 4

是的,这是不好的做法。也许不是在这种情况下,但其他线程可能会更新该属性,并在该线程检查nil和强制展开之间将其设置为零。

做就是了:

if let arrayOfStrings = self.arrayOfStrings {
    textLabel.text = arrayOfStrings[0]
}
Run Code Online (Sandbox Code Playgroud)

这里没有不必要的变量,因为您实际上在if let.

当然,在尝试获取可选数组的第一个值的这种非常特殊的情况下,您可以简单地执行以下操作:

textLabel.text = self.arrayOfStrings?.first
Run Code Online (Sandbox Code Playgroud)

如果你确实想要索引 0 以外的东西,你应该检查索引:

if let arrayOfStrings = self.arrayOfStrings, someIndex < arrayOfStrings.count {
    textLabel.text = arrayOfStrings[someIndex]
}
Run Code Online (Sandbox Code Playgroud)

在这些情况下,“额外”变量都不是浪费精力或内存。它作为常量以只读方式使用,并且 Swift 足够聪明,不会在此过程中创建数组的完整副本。