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

相關文章
相關標籤/搜索