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)"
}
在实际开发中如果没有特别需要,用简洁写法就可以了,这样看起来代码更加优雅,容易维护。
Swift:字符串(String)分割之Substring优雅转换的更多相关文章
- [Swift]字符串(String类、NSString类)常用操作
NS是Cocoa类对象类型的前缀,来源于乔布斯建立的另一家公司--NeXTNSString的使用方法,和Swift语言中的String有很多相似之处. 1.字符串的定义String类 var str1 ...
- Swift 中 String 与 CChar 数组的转换
在现阶段Swift的编码中,我们还是有很多场景需要调用一些C函数.在Swift与C的混编中,经常遇到的一个问题就是需要在两者中互相转换字符串.在C语言中,字符串通常是用一个char数组来表示,在Swi ...
- Swift中String与NSDate的互相转换
其实每种编程语言,我都觉得String和日期对象的相互转换是一种十分麻烦的事情,Swift也不例外.这篇博客记录了我学到的String与NSDate的互相转换方法,供大家参考. 从String转为NS ...
- Swift 字符串的分割
componentsSeparatedByString 就是根据 传递的 一个字符,进行字符串的一个分割 // 分割字符串 - > let sourceArray = source.compon ...
- java 字符串(String)常用技巧及自建方法模块汇总
1.String类常用方法汇总 (1)删除字符串的头尾空白符 public String trim() (2)从指定位置截取字符串 public String substring(int beginI ...
- [Swift]扩展String类:extension String
请参考本博客另一篇技术博文: <[Swift]字符串(String类.NSString类)常用操作> extension String { //获取字符串首字符 var first: St ...
- C# 字符串string和内存流MemoryStream及比特数组byte[]之间相互转换
定义string变量为str,内存流变量为ms,比特数组为bt 1.字符串转比特数组 复制代码 代码如下: (1)byte[] bt=System.Text.Encoding.Default.GetB ...
- C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)
在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...
- Swift的字符串String是值类型
根据<The Swift Programming Language>中文版基于Xcode6.1的文章描述: Swift的 String 类型是值类型.如果创建了新的字符串,那么当其进行常量 ...
随机推荐
- 浅谈javascript函数执行过程
javascript函数执行过程: 1. 为函数创建一个执行环境 2. 复制函数的 [[scopes]] 属性中的对象构建起执行环境的作用链域 3. 创建函数活动对象并推入执行环境作用链域的前端 4. ...
- 阿里云Confluence无法发送邮件修复
阿里云屏蔽外网的25端口,防止发送垃圾邮件,所以导致阿里云上的ecs无法发送邮箱 采用腾讯邮箱,端口25和465都试了好几遍,最终改成587即可 参考https://blog.csdn.net/qq_ ...
- Ansible(一) Try it - 枯鱼的博客
学习ansible的最好方式就是使用,先别管什么inventory,playbook,module这些.按照安装文档安装,然后try it,一边学一边体验,这样的速度是最快的.当熟悉了之后,想要深入就 ...
- ckeditor 捕获键代码
<!--<script type="text/javascript"> var ctrlKey = false; var shiftKey = false; if ...
- JavaScript中点击按钮弹出新的浏览器窗口
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.js * 作者:常轩 * 微信公众号:Worldhel ...
- 一文看懂js中的clientX,clientY,pageX,pageY,screenX,screenY
一. 客户区坐标位置(clientX,clientY) 鼠标事件都是在浏览器视口中的特定位置发生的.这个位置信息保存在事件对象的clientX和clientY属性中,所有浏览器都支持这两个属性. 我们 ...
- 并查集(不相交集)的Union操作
在并查集(不相交集)中附加操作\(Deunion\),它实现的功能是取消最后一次\(Union\)的操作. 实现思想 初始化一个空栈,将每一次的\(Union\)操作的两个集合的根和其值\(Push\ ...
- 《一步步成为 Hacker_Day 01》
环境搭建 传统运行模式 - 一台机器同时只能运行一个操作系统 |:----------|----------:| | 应用程序 | 应用程序 | |:----------|----------:| | ...
- Vue项目三、项目中碰到的问题详解
一.组件的划分创建 方法一: 把页面上需要复用的模块,拆分成组件.比如,页面的header.footer.面包屑.弹出框等拆分成组件.所以在src中应该有一个文件夹(components)专门放这些会 ...
- vue用template还是JSX?
各自特点 template 模板语法(HTML的扩展) 数据绑定使用Mustache语法(双大括号) <span>{{title}}<span> JSX JavaScript的 ...