Swift:字符串(String)分割之Substring优雅转换
认识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)"
}
在实际开发中如果没有特别需要,用简洁写法就可以了,这样看起来代码更加优雅,容易维护。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/05/26 08:28