这样做是否被认为是不好的实践呢?
我正在检查数组是否为 nil,然后强制解包以从数组中检索元素。我这样做是为了避免创建一个不必要的 if let 变量。
if self.arrayOfStrings != nil{
textLabel.text = self.arrayOfStrings![0]
}
这样做是否被认为是不好的实践呢?
我正在检查数组是否为 nil,然后强制解包以从数组中检索元素。我这样做是为了避免创建一个不必要的 if let 变量。
if self.arrayOfStrings != nil{
textLabel.text = self.arrayOfStrings![0]
}
Is it considered bad practice to do this
if self.arrayOfStrings != nil{ textLabel.text = self.arrayOfStrings![0] }
这不是坏习惯,我有时也会这样做;但这是不必要的,而且有点不寻常,因为这种情况可以使用条件绑定来解决。
我正在检查数组是否为nil,然后强制解包以从数组中检索元素。我这样做是为了避免创建一个不必要的if let变量。
创建一个if let
变量并不是“不必要”的。它是一种优雅的处理方法。你提出的是“不必要”的(而且浪费资源,因为你强制运行时访问self.arrayOfStrings
两次)。
根据是否需要在arrayOfStrings
为nil
时停止所有操作,你有两种选择:
你可以使用guard:
guard let arr = self.arrayOfStrings else {return}
textLabel.text = arr[0]
if let arr = self.arrayOfStrings {
textLabel.text = arr[0]
}
除了提前退出之外,区别在于arr
的范围。
因此,尽管在某种程度上这是一个主观问题,但我认为问题在于您对优雅的理解。
是的,这是不好的实践。也许在这种情况下可能没有问题,但是有可能其他线程会更新属性并将其变为空值,在此线程检查 nil
并强制解包之间。
请只执行:
if let arrayOfStrings = self.arrayOfStrings {
textLabel.text = arrayOfStrings[0]
}
这里没有不必要的变量,因为你实际上在if let
中使用了该变量。
当然,在尝试获取可选数组的第一个值的这种非常特殊的情况下,你可以简单地执行以下操作:
textLabel.text = self.arrayOfStrings?.first
如果您想获取索引值非0的元素,请先检查索引:
if let arrayOfStrings = self.arrayOfStrings, someIndex < arrayOfStrings.count {
textLabel.text = arrayOfStrings[someIndex]
}
if let
变量并不是不必要的。你会在if
语句中使用它。这就是整个意图。 - rmaddytextLabel.text = arrayOfStrings?.first
- Leo Dabus