Swift:字符串(String)分割之Substring优雅转换

Swfit4.0 学习 2018-12-26 已阅 856 次

认识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)"
}

在实际开发中如果没有特别需要,用简洁写法就可以了,这样看起来代码更加优雅,容易维护。


本文由 Harvey 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论