认识Substring
类型
这是一个全新的类型,看类名像是String
的子类,但是大家千万别被误导了,Substring
并不是String
的子类,这是两个不同的类型,但是它们都继承了StringProtocol
协议,因此存在一些共性;在开发中Substring
并不常用(目前只在分割String
见到),所以往往要转成String
字符串(String
)分割函数
下面是Swift中分割函数定义
public func split(separator: Character, maxSplits: Int = default, omittingEmptySubsequences: Bool = default) -> [Substring]
从定义我们知道返回类型是[Substring]
,并不是[String]
参数 | 描述 |
---|---|
separator | 分割标识 |
maxSplits | 最大分割次数,1 =表示只分割2次就停止,2 =表示只分割2次就停止,以此类推,默认值为Int.max
|
omittingEmptySubsequences | 是否忽略空值,true =忽略空值, fasle =不忽略空值, 默认值为true
|
字符串分割示例
let string = "aaa/bbb/ccc/dddd"
let arraySubstrings: [Substring] = string.split(separator: "/")
在文章开始前就说过Substring
并不常用,所以我们要把[Substring]
转成[String]
方法1
var arrayStrings: [String] = []
for item in arraySubstrings {
arrayStrings.append("\(item)")
//arrayStrings.append(String(item))
}
方法2
var arrayStrings: [String] = []
arraySubstrings.forEach { (item) in
arrayStrings.append("\(item)")
//arrayStrings.append(String(item))
}
不管是方法1还是方法2,转换都稍显繁琐,不优雅;在Swift标准库提供compactMap
方法来进行转换,相对前面2种方法更加优雅
let arrayStrings: [String] = arraySubstrings.compactMap { "\($0)" }
这上面是compactMap
的简洁写法,完整语法如下
let arrayStrings: [String] = arraySubstring.compactMap {
(item) -> String in
return "\(item)"
}
在实际开发中如果没有特别需要,用简洁写法就可以了,这样看起来代码更加优雅,容易维护。