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

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

原有方式的不足

传统的方式咱们使用双引号包裹来声明字符串,若是有参数则只用 \(参数)表示。由此引起的问题是若是字符串中包含 \ ” 则须要进行转义,不然格式识别会有冲突:github

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

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

解决方案

5.0 中增长的解决方案是引入一个新的字符 # 声明字符串:正则表达式

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

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

若是字符串声明被 # 号包裹,字符串中的 \ ” 再也不须要转义了。swift

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

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

多行文本

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

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

新的问题

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

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

总结

若是你恰好须要声明一个正则表达式,使用新的方案会优雅、直观不少:code

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

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

参考连接:ci

相关文章
相关标签/搜索