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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Harvey66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值