toc
isEmpty
属性- 如何判断空白字符串
- 如何判断Optional的字符串
Swift 一个特色就是有很多的语法糖,初学可能觉得hold不住,实际用的时候倒是挺便利。
基于对此的喜爱,简单转译一篇短文,Empty Strings in Swift。
isEmpty
属性
Swift中String
是字符的结合,遵循Collection
协议。因此会有isEmpty
的属性,来判断字符串是否为空。
var isEmpty: Bool {get}
Collection.swift
的具体实现是:
public var isEmpty: Bool {
return startIndex == endIndex
}
代码语言:javascript复制"Hello".isEmpty // false
"".isEmpty // true
不要使用count
是否为0的方式来判断,这样会遍历整个字符串,性能差。
如何判断空白字符串
有时候的需求是判断字符串是否是空白字符串,因为设计字符编码的问题,通常不好实现。
代码语言:javascript复制" " // space
"trn" // tab, return, newline
"u{00a0}" // Unicode non-breaking space
"u{2002}" // Unicode en space
"u{2003}" // Unicode em space
通常的一些做法是,trim左右的空白,然后判断是否为空,但是swift中有更好的方式,可以使用字符的属性, 类似这样。
代码语言:javascript复制func isBlank(_ string: String) -> Bool {
for character in string {
if !character.isWhitespace {
return false
}
}
return true
}
这样可以实现,但是更优雅的是,使用allSatisfy
的方法。
"Hello".isBlank // false
" Hello ".isBlank // false
"".isBlank // true
" ".isBlank // true
"trn".isBlank // true
"u{00a0}".isBlank // true
"u{2002}".isBlank // true
"u{2003}".isBlank // true
如何判断Optional的字符串
option类型字符串的判断,也可以写得很优雅。
代码语言:javascript复制extension Optional where Wrapped == String {
var isBlank: Bool {
return self?.isBlank ?? true
}
}
代码语言:javascript复制var title: String? = nil
title.isBlank // true
title = ""
title.isBlank // true
title = " t "
title.isBlank // true
title = "Hello"
title.isBlank // false