本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。建立字串變數有兩種寫法:
string("something")
和"something"
,這兩種寫法效果一樣但背後的原理不同。"something"
是字串字面量,在前面的章節我們已經介紹過陣列字面量。
想通過字串字面量建立字串變數,比使用陣列更複雜一些。我們看一下stringliteralconvertible
協議的定義:
public
protocol
stringliteralconvertible : extendedgraphemeclusterliteralconvertible
public
typealias
stringliteraltype = string
複製**
可見stringliteralconvertible
協議繼承自extendedgraphemeclusterliteralconvertible
協議:
public
protocol
extendedgraphemeclusterliteralconvertible : unicodescalarliteralconvertible
public
typealias
extendedgraphemeclustertype = string
複製**
而extendedgraphemeclusterliteralconvertible
協議又整合自unicodescalarliteralconvertible
協議:
public
protocol
unicodescalarliteralconvertible
public
typealias
unicodescalartype = string
複製**
因此,要實現字串字面量就必須實現這三層協議棧中所有的方法:
extension
regex: stringliteralconvertible
public
init(extendedgraphemeclusterliteral value: string)
public
init(unicodescalarliteral value: string)
}複製**
除非我們需要做一些細粒度的管理,比如字串可能通過字形集群或unicode標量建立,否則就像上面這樣,直接使用字串版本的實現即可。
實現了stringliteralconvertible
協議後,我們就可以這樣建立regex
型別的變數:
let r: regex = "^h..lo*!$"
複製**
如果變數的型別已經確定,事情就更簡單了:
func
findmatches
(strings: [string], regex: regex)
-> [string]
}let matches = findmatches(["foo", "bar", "baz"], regex: "^b..")
print(matches) // 輸出結果:["bar", "baz"]
複製**
觀察此前協議棧中三個協議的定義,他們都有乙個型別別名:
typealias ***
public
typealias *** = string
複製**
因此預設情況下通過字串字面量建立的變數的型別都是string
。如果你需要人為指定這個型別(在特定場合下可能性能更好),你可以重新指派型別別名:
typealias
stringliteraltype = staticstring
let what = "hello"
print(what is
staticstring) // 輸出結果:true
print(what is
string) // 輸出結果:false
複製**
第七章 字串
python字串 乙個有序的字元的集合,用來儲存和表現基於文字的資訊。字串常量 1 單雙引號字串是一樣的 在python字串中,單引號和雙引號字元是可以互換的。2 用轉義序列代表特殊位元組 反斜槓用來引入特殊的位元組編碼,是轉義序列。3 raw字串抑制轉義 如果字母r 大寫或小寫 出現在字串的第乙個...
第七章 字串 字串除錯
本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結 你其實真的不懂print hello,world 不知道你有沒有注意到乙個細節,不管你使用什麼型別的引數,pri...
第七章 字串 字元流
本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結 你其實真的不懂print hello,world 如果型別比較複雜,你可能需要考慮實現streamable協議。...