第七章 字串 字串字面量轉換

2021-09-11 10:11:05 字數 2323 閱讀 1695

本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。

建立字串變數有兩種寫法: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協議。...