我每天检查数组(字符串)是否为空,现在我在各处使用isEmpty == true
或isEmpty == false
。不管数组是否可选,这对我来说都是一个好技术,如果数组不是可选的,则有助于更快地读取代码。但是,我很容易错了,这可能是可怕的代码。
所以我只想知道成熟的开发人员如何检查数组?我已经尝试使用(string ?? "").isEmpty
,string?.isEmpty ?? true
等。有一些扩展名,例如isNilOrEmpty
,但似乎有点难看:c
答案 0 :(得分:5)
数组是否可选,
这可能是您出错的地方。为什么数组是可选的,并且尤其是如果空和nil表示同一件事,为什么数组是可选的?如果发现自己在问这个问题,则说明您的类型设计不正确。该数组应该只是一个数组,您应该在过程的更早阶段使用... ?? []
来确保在必要时为真。一个类型应避免具有多个表示同一意思的值。
只有在empty和nil之间存在语义差异时,才应该有一个可选的Collection(包括String),在这种情况下,您需要测试该差异。
因此,不应该使用== true
或== false
。在大多数情况下,Swift效果不佳,因为它迫使读者进行精神体操以了解在nil
情况下的含义,而且还因为它在显示您的潜在设计问题。
有时候,null和nil具有不同的含义。我最喜欢的示例之一是多层配置方案,其中“ nil”表示“无设置”,“ empty”表示在此层显式设置为空。在这些情况下,可选集合绝对合适。在这种情况下,使用== true
类型的语法可能是可以接受的(尽管我通常会使用?? []
;这只是样式)。但是,根据我的经验,这些情况很少见。
答案 1 :(得分:2)
我不是成熟的开发人员,但是,如果我有可选集合,我首先会拆开它,例如使用可选绑定
if let array = optionalArray { ... }
然后如果我知道集合存在,我将通过检查isEmpty
是否为false
if !array.isEmpty { ... }
仅需一个if
语句即可简化
if let array = optionalArray, !array.isEmpty { ... }
如果您有字符集合
let optionalString: String? = "Hey"
if let string = optionalString, !string.isEmpty {
print("String contains \(string.count) characters")
// String contains 3 characters
}
答案 2 :(得分:1)
edX.org