Swift 5.0 值得关注的特性:更强大的 Raw String
Posted Cocoa开发者社区
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift 5.0 值得关注的特性:更强大的 Raw String相关的知识,希望对你有一定的参考价值。
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
---END---
以上是关于Swift 5.0 值得关注的特性:更强大的 Raw String的主要内容,如果未能解决你的问题,请参考以下文章