Swift 5.0 值得关注的特性:更强大的 Raw String

栏目: Swift · 发布时间: 6年前

内容简介:Swift 5.0 对字符串声明增加了一个强有力的新特性,使用传统的方式我们使用双引号包裹来声明字符串,如果有参数则只用5.0 中增加的解决方案是引入一个新的字符

Swift 5.0 对字符串声明增加了一个强有力的新特性,使用 # 包裹字符串。

原有方式的不足

传统的方式我们使用双引号包裹来声明字符串,如果有参数则只用 \(参数) 表示。由此引发的问题是如果字符串中包含 \ ” 则需要进行转义,否则格式识别会有冲突:

let qutoedString = "如果句子里面有\"双引号\"就很尴尬"
// 输出: 如果句子里面有"双引号"就很尴尬

let escapeString = "如果句子里面有\\转义符号反斜杆\\也很尴尬"
// 输出: 果句子里面有\转义符号反斜杆\也很尴尬
复制代码

解决方案

5.0 中增加的解决方案是引入一个新的字符 # 声明字符串:

let newQutoedString = #"如果句子里面有"双引号"就很尴尬"#
// 输出: 如果句子里面有"双引号"就很尴尬

let newEscapeString = #"如果句子里面有\转义符号反斜杆\也很尴尬"#
// 输出: 果句子里面有\转义符号反斜杆\也很尴尬
复制代码

如果字符串声明被 # 号包裹,字符串中的 \ ” 不再需要转义了。

相对的字符串中的参数占位符也要修改为 \#(参数)

let escapeCharacter = #"\"#
let newParamString = #"如果句子里面有\#(escapeCharacter)转义符号反斜杆\#(escapeCharacter)也很尴尬"#
复制代码

多行文本

在 4.0 中引入了 """ 表示多行的文本,新的方法也兼容多行文本。方式和前面类似,在 """ 前增加 # 即可:

let multiLineText = #"""
   "\"
一切正常
"""#
复制代码

新的问题

使用井号表示的字符串结尾的字符是 "# ,如果句子中出现了 "# 则不可避免引起歧义,所以需要一种新的方式转义。区别于传统的在需要转义的字符前加反斜杆的方式,Swift 中采用的是在将首尾的 # 替换为 ##

let escapeHashCharacter = ##"如果刚好有个字符 "# 呵呵和结束符意义就尴尬了"##
复制代码

总结

如果你刚好需要声明一个正则表达式,使用新的方案会优雅、直观很多:

let regex1 = "\\\\[A-Z]+[A-Za-z]+\\.[a-z]+"

let regex2 = #"\\[A-Z]+[A-Za-z]+\.[a-z]+"#
复制代码

参考链接:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

OKR工作法

OKR工作法

克里斯蒂娜•沃特克 (Christina Wodtke) / 明道团队 / 中信出版社 / 2017-9-1 / CNY 42.00

《OKR工作法》讲述了一种风靡硅谷科技企业的全新工作模式。 如何激励不同的团队一起工作,全力以赴去实现一个有挑战性的目标? 硅谷的两个年轻人汉娜和杰克,像很多人一样,在萌生了一个创意后,就走上创业之路。但是,很快他们发现好的想法远远不够,必须还有一套适合的管理方法确保梦想能实现。为了让创业团队生存下来,汉娜和杰克遭受了内心的苦苦挣扎和煎熬。他们患上“新奇事物综合症”,什么都想做,导致无......一起来看看 《OKR工作法》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具