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

2019 年 4 月 10 日 CocoaChina

HackingSwift: What’s new in Swift 5.0

SE200: Enhancing String Literals Delimiters to Support Raw Text 


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]+"#




作者:没故事的卓同学

链接:https://www.jianshu.com/p/17fab783bfad

本公众号转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系本公众号进行修改或删除【联系方式QQ : 3442093904  邮箱:support@cocoachina.com】。文章内容为作者独立观点,不代表本公众号立场。版权归原作者所有,如申请授权请联系作者,因文章侵权本公众号不承担任何法律及连带责任。

---END---


登录查看更多
1

相关内容

苹果公司在 WWDC 2014 开幕 Keynote 上发布的全新编程语言,具有更多现代化特性,同时容易使用,定位是补充 Objective-C. > Swift is an innovative new programming language for Cocoa and Cocoa Touch. Writing code is interactive and fun, the syntax is concise yet expressive, and apps run lightning-fast. Swift is ready for your next iOS and OS X project — or for addition into your current app — because Swift code works side-by-side with Objective-C.

Swift - Apple Developer

【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
简明扼要!Python教程手册,206页pdf
专知会员服务
47+阅读 · 2020年3月24日
专知会员服务
51+阅读 · 2020年1月13日
TensorFlow 2.0新特性之Ragged Tensor
深度学习每日摘要
18+阅读 · 2019年4月5日
iOS自定义带动画效果的模态框
CocoaChina
7+阅读 · 2019年3月3日
Python3.8新特性概览
Python程序员
4+阅读 · 2018年12月8日
教你实现超流行的骨架屏预加载动态效果
IMWeb前端社区
73+阅读 · 2018年11月27日
别@微信团队了,我用Python给自己戴上了圣诞帽!
推荐|斯坦福的Stanford.NLP.NET:集合多个NLP工具
全球人工智能
3+阅读 · 2017年12月25日
ICLR 2018 有什么值得关注的亮点?
计算机视觉战队
3+阅读 · 2017年12月5日
Arxiv
101+阅读 · 2020年3月4日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
VIP会员
相关资讯
TensorFlow 2.0新特性之Ragged Tensor
深度学习每日摘要
18+阅读 · 2019年4月5日
iOS自定义带动画效果的模态框
CocoaChina
7+阅读 · 2019年3月3日
Python3.8新特性概览
Python程序员
4+阅读 · 2018年12月8日
教你实现超流行的骨架屏预加载动态效果
IMWeb前端社区
73+阅读 · 2018年11月27日
别@微信团队了,我用Python给自己戴上了圣诞帽!
推荐|斯坦福的Stanford.NLP.NET:集合多个NLP工具
全球人工智能
3+阅读 · 2017年12月25日
ICLR 2018 有什么值得关注的亮点?
计算机视觉战队
3+阅读 · 2017年12月5日
Top
微信扫码咨询专知VIP会员