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]+"# 複製程式碼
參考連結: