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