这样做是否被认为是不好的做法
我正在检查数组是否为nil,然后强制展开以从数组中检索元素。我这样做是为了避免创建不必要的if变量。
if self.arrayOfStrings != nil{
textLabel.text = self.arrayOfStrings![0]
}
答案 0 :(得分:4)
是的,这是不好的做法。也许不是在这种情况下专门,但是其他线程可能会更新该属性,并使该属性在检查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]
}
在所有这些情况下,“额外”变量都不是浪费精力或记忆。它以只读方式用作常量,并且Swift足够聪明,因此无法在该过程中创建数组的完整副本。
答案 1 :(得分:3)
这样做是否被认为是不好的做法
if self.arrayOfStrings != nil{ textLabel.text = self.arrayOfStrings![0] }
不错的做法,我有时会这样做;但这是不必要的,而且有点不寻常,因为这种情况旨在解决条件绑定。
我正在检查数组是否为nil,然后强制展开以从数组中检索元素。我这样做是为了避免创建不必要的if变量。
“创建if let
变量”不是“不必要的”。这是处理此问题的优雅方法。您提议的 是“不必要的”(这很浪费,因为您要强迫运行时两次访问self.arrayOfStrings
)。
您有两种选择,取决于arrayOfStrings
为nil
时是否需要停止一切。
您可以设置警卫:
guard let arr = self.arrayOfStrings else {return}
textLabel.text = arr[0]
或者您可以使用条件绑定:
if let arr = self.arrayOfStrings {
textLabel.text = arr[0]
}
(除了提早退出)区别在于arr
的范围。
因此,尽管在某种程度上这是一个见解,但我想说的是,这里的问题在于您对优雅的理解。