本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。
如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結: 你其實真的不懂print("hello,world")不知道你有沒有注意到乙個細節,不管你使用什麼型別的引數,
print
、string.init()
函式總是可以正常工作。比如我們定義乙個結構體,其中年齡作為私有屬性需要對外保密:
struct
person
}複製**
分別使用print
和string.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
協議,也依然可以使用debugprint
和string.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...