可選擴展中的 swift 關鍵字 Wrapped 是什么意思?
extension Optional {
func flatMap<U>(_ transform: (Wrapped) -> U?) -> U? {
guard let x = self else { return nil }
return transform(x)
}
}
uj5u.com熱心網友回復:
在擴展中,您正在擴展的型別的泛型引數可以通過只寫它們的簡單名稱來參考,并注意這Optional是一個泛型型別。
@frozen enum Optional<Wrapped>
所以Wrapped在函式宣告中是指在那里宣告的泛型引數。
您可能知道,可選型別通常寫為T?(where Tis some type),這是Optional<T>. 例如,Int?與 相同Optional<Int>,與String?相同Optional<String>,等等。
換句話說,Wrapped基本上只是表示 之前的型別?,無論它是什么。如果您有String?(又名Optional<String>),那么flatMapfor的簽名將是:
func flatMap<U>(_ transform: (String) -> U?) -> U?
uj5u.com熱心網友回復:
沒有關鍵字“Wrapped”。這是一個型別引數。這類似于運行時引數。如果你看到:
func f(x: Int) { ... }
x不是關鍵字。它只是一個引數名稱。同理,Optional 定義為:
enum Optional<Wrapped>
“Wrapped”只是傳遞給Optional 的型別引數。所以在這個擴展中:
func flatMap<U>(_ transform: (Wrapped) -> U?) -> U? {
“Wrapped”只是指任何 Optional 正在包裝的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322520.html
標籤:迅速
