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

Is it a bad practice to use something?.isEmpty == true

我每天多次检查数组(字符串)是否为空,现在我到处都使用 isEmpty == trueisEmpty == false。无论数组是否可选,这对我来说都是一个很好的技术,如果数组不是可选的,它有助于更​​快地阅读代码。但是,我很容易出错,这可能是糟糕的代码。

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

我不是成熟的开发人员,但是,如果我有可选的集合,我会先打开它,例如使用可选绑定

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
}
guard let array = optionalArray , !array.isEmpty else {return}

Whether array is optional or not,

这可能是您出错的地方。为什么数组是可选的,尤其是 为什么数组是可选的,如果 empty 和 nil 意思相同?如果您发现自己在问这个问题,那么您的类型设计不正确。该数组应该只是一个数组,并且您应该在此过程的更早阶段使用 ... ?? [] 以确保在必要时为真。一个类型应该避免有多个表示同一事物的值。

只有当 empty 和 nil 之间存在语义差异时,您才应该有一个可选的集合(包括字符串),在这种情况下,您需要测试该差异。

所以不,你不应该使用 == true== false。在大多数情况下,这很糟糕 Swift,因为它迫使 reader 进行心理体操以理解它在 nil 情况下的含义,但也因为它显示了您的潜在设计问题。

empty 和 nil 有时有不同的含义。我最喜欢的例子之一是多层配置方案,其中 "nil" 表示 "no setting","empty" 表示在这一层明确设置为空。在那些情况下,可选集合是绝对合适的。在这些情况下使用 == true 类型语法可能是可以接受的(尽管我通常会使用 ?? [] 代替;那只是风格)。但根据我的经验,这些情况非常罕见。