跳到主要内容

Swift 中正确判断字符串是否为空的方法

· 阅读需 3 分钟
GoSwiftUI
goswiftui.com

这段代码看起来似乎没有什么问题,对吧?

img

然而,实际上它隐藏了一个相当严重的问题!

现在我们来理解一下这个问题是什么。

这段代码的目的非常明确:我们正在检查myString是否为空。

img

事实证明,Swift 还提供了一个内置属性来实现这个目的,叫做isEmpty

img

而这种第二种方法要好得多!

那么这两种方法有什么区别呢?

img

当我们调用isEmpty时,在底层 Swift 只需要检查字符串是否至少包含一个字符:这是非常快速的执行过程。

而且更好的是,这个执行时间不取决于字符串的长度。

另一方面,属性count的工作方式非常不同。

img

count将返回字符串中可见字符的数量。

由于一些 Unicode 字符可以组合成一个单独的可见字符,这意味着 count 必须遍历字符串中的所有字符。

因此,如果字符串很长,或者有很多字符串,这段代码将需要很长时间来执行。

这就是这段代码背后的大问题!

所以记住,每当你需要测试一个字符串是否为空时,绝对不要手动测试它的 count 是否大于零,因为这样做会很慢!

img

这篇文章就到这里,希望你喜欢这种新的格式!

如果你想要尝试这段代码,这里是它的样例:

if myString.count > 0 {
// `myString`不为空
}

if myString.isEmpty == false {
// `myString`不为空
}