第七章 字串 字串除錯

2021-09-11 10:11:05 字數 2246 閱讀 2869

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

如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結: 你其實真的不懂print("hello,world")

不知道你有沒有注意到乙個細節,不管你使用什麼型別的引數,printstring.init()函式總是可以正常工作。比如我們定義乙個結構體,其中年齡作為私有屬性需要對外保密:

struct

person

}複製**

分別使用printstring.init()函式,檢視結果:

let kt = person(name: "kt", age: 21)

let s: string = string(kt)

print(kt) // 輸出結果:person(name: "kt", age: 21)

print(s) // 輸出結果:person(name: "kt", age: 21)

複製**

好訊息是這兩個函式執行正常,列印出了結構體的所有資訊,但缺點是私有屬性也被顯示出來了。如果想自定義輸出格式,或避免暴露私有成員,也很容易實現,只需要實現customstringconvertible協議即可:

extension

person: customstringconvertible

}複製**

如果只是專門用於除錯,你還可以實現customdebugstringconvertible協議:

extension

person: customstringconvertible, customdebugstringconvertible

}複製**

為了使用這個協議,你可以呼叫string.init(reflecting: t)方法,這個方法得到的字串是t型別在實現customdebugstringconvertible協議時定義的計算屬性debugdescription。舉個例子說明:

let debug = string(reflecting: kt)

print(debug) // 輸出結果:in debugging: name is kt

複製**

或者你也可以直接呼叫debugprint函式:

debugprint(kt)	// 輸出結果:in debugging: name is kt

複製**

需要說明的是,即使你沒有實現customdebugstringconvertible協議,也依然可以使用debugprintstring.init(reflecting: t)方法,此時的字串會是customstringconvertible協議中的計算屬性description

由於實現了customstringconvertible協議的型別一般都有很好的輸出結果,你或許會實現這樣的**:

func

dosomethingattractive

(with value: t)

複製**

如果你這麼做了,很快你會發現string型別並沒有實現customstringconvertible協議,而字串恰好是最常被輸出的型別。這是因為swift不希望我們以這種方式使用customstringconvertible協議。我們不應該去檢查乙個型別是否具有description屬性,而是應該不管在什麼情況下都使用string.init。我們也應該認識到,如果乙個型別並不是可輸出的,呼叫print方法確實會得到乙個很醜的結果。因此,除非是乙個非常簡單的類,我們總是應該實現customstringconvertible協議,這用不了太多時間,但是會在以後的除錯過程中起到很大的作用,正所謂磨刀不誤砍柴工!

第七章 字串

python字串 乙個有序的字元的集合,用來儲存和表現基於文字的資訊。字串常量 1 單雙引號字串是一樣的 在python字串中,單引號和雙引號字元是可以互換的。2 用轉義序列代表特殊位元組 反斜槓用來引入特殊的位元組編碼,是轉義序列。3 raw字串抑制轉義 如果字母r 大寫或小寫 出現在字串的第乙個...

第七章 字串 字元流

本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結 你其實真的不懂print hello,world 如果型別比較複雜,你可能需要考慮實現streamable協議。...

Python 第七章字串

一.單選題 共7題,70.0分 a 分片 b 合併 c 索引 d 賦值 正確答案 a world world print hello world a helloworld b hello world c hello world d hello world 正確答案 a a abc def b joi...