isEmpty == true是使用某些东西不好的做法吗?

时间:2019-04-05 16:57:05

标签: arrays swift string optional

我每天检查数组(字符串)是否为空,现在我在各处使用isEmpty == trueisEmpty == false。不管数组是否可选,这对我来说都是一个好技术,如果数组不是可选的,则有助于更快地读取代码。但是,我很容易错了,这可能是可怕的代码。

所以我只想知道成熟的开发人员如何检查数组?我已经尝试使用(string ?? "").isEmptystring?.isEmpty ?? true等。有一些扩展名,例如isNilOrEmpty,但似乎有点难看:c

3 个答案:

答案 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