本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。
如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結: 你其實真的不懂print("hello,world")如果型別比較複雜,你可能需要考慮實現
streamable
協議。在這個協議中定義了乙個范型函式writeto
,引數所屬的型別必須實現outputstreamtype
協議,方法的呼叫者把自己寫入這個引數中(最簡單方法就是呼叫print
函式)。我們呼叫的是過載了的print
函式,所以千萬不要忘記加上引數tostream
,否則會很難發現這個錯誤。舉個例子說明:
extension
person: streamable
}複製**
因為字串就實現了outputstreamtype
協議,所以我們可以把person
型別的變數寫入到字串中:
var description = ""
let person = person(name: "kt", age: 21)
person.writeto(&description)
print(description) // 輸出結果:[name is kt, age is 21]
複製**
我們把實現了outputstreamtype
協議的型別稱為輸出流,string
是標準庫中定義的唯一乙個輸出流型別。當然,也可以手動定義自己的輸出流,只要實現outputstreamtype
協議中定義的write
方法即可:
struct
arraystream: outputstreamtype
}複製**
這樣,我們就可以把多個字串寫入arraystream
型別中:
var arraystream = arraystream()
let s1 = "s1"
let s2 = "s2"
s1.writeto(&arraystream)
s2.writeto(&arraystream)
print(arraystream) // 如果你需要定製輸出效果,可以像上一節所說的,實現customstringconvertible協議
複製**
需要強調一點,這並非輸出流的正確使用方法,它僅用於演示outputstreamtype
的工作原理。
雖然字串是唯一實現了outputstreamabletype
協議的型別,但諸如print
這樣的函式,也可以很好地處理streamable
型別的引數,舉個例子:
struct
slowstreamer: streamable, arrayliteralconvertible
func
writeto
(inout target: target) }
}let slow: slowstreamer = [
"you'll see that ghis gets",
"written slowly line-by-line",
"to the standard output"
]print(slow)
複製**
執行程式後你會發現,在執行print
函式的過程中,每一行字串不斷地被輸出。在writeto
函式的內部我們呼叫了print
方法,其第二個引數為標準輸出,你也可以實現和此類似的標準錯誤輸出:
struct
stderr: outputstreamtype
}var standarderror = stderr()
print("oops!", tostream: &standarderror) // 輸出結果:oops!
複製**
還可以在輸出流中對輸入值做些處理,我們實現乙個自定義的輸出流:
struct
replacingstream
: outputstreamtype
mutating
func
write
(string: string)
print(towrite, separator:"", tostream: &outputstream)}}
複製**
如果把字串輸出到這個流而不是標準輸出流,我們就達到了處理字串的效果:
var replacer = replacingstream(replacing: ["1":"2"], output: standarderror)
let source = "111333"
print(source, tostream: &replacer) // 輸出結果:222333
複製**
第七章 字串
python字串 乙個有序的字元的集合,用來儲存和表現基於文字的資訊。字串常量 1 單雙引號字串是一樣的 在python字串中,單引號和雙引號字元是可以互換的。2 用轉義序列代表特殊位元組 反斜槓用來引入特殊的位元組編碼,是轉義序列。3 raw字串抑制轉義 如果字母r 大寫或小寫 出現在字串的第乙個...
第七章 字串 字串除錯
本文系閱讀閱讀原章節後總結概括得出。由於需要我進行一定的概括提煉,如有不當之處歡迎讀者斧正。如果你對內容有任何疑問,歡迎共同交流討論。如果你覺得這兩節的內容比較雜亂,強烈推薦我的這篇總結 你其實真的不懂print hello,world 不知道你有沒有注意到乙個細節,不管你使用什麼型別的引數,pri...
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...