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

laz*_*dev 1 arrays string optional swift

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

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

Rob*_*ier 5

不管数组是否可选,

这是您可能出错的地方。为什么数组是可选的,尤其是如果null和nil表示相同的意思,为什么数组是可选的?如果发现自己在问这个问题,则说明您的类型设计不正确。该数组应该只是一个数组,... ?? []如果需要的话,您应该在过程的更早阶段就确保它是正确的。一个类型应避免具有多个表示同一意思的值。

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

所以不,您不应使用== true== false。在大多数情况下,Swift效果不佳,因为它迫使读者进行精神体操以了解其含义nil,而且还因为它显示出您的潜在设计问题。

有时候,empty和nil具有不同的含义。我最喜欢的示例之一是多层配置方案,其中“ nil”表示“无设置”,“ empty”表示在此层显式设置为空。在这些情况下,可选集合绝对合适。== true在这种情况下使用类型语法可能是可以接受的(尽管我通常会改用类型语法?? [];这只是样式)。但是,根据我的经验,这些案例很少见。