地道的 Swift 解包引導的初始化過程

2021-09-18 02:18:56 字數 847 閱讀 9794

在 swift-users 上,丹問到:

最近我在做下面這樣的東西:

let dobstring: string

if let dob = dob

else

有沒有更好更地道的寫法能夠實現同樣的功能呢?

我猜serverdateformatternsdateformatter的乙個例項。如果是這樣的話,丹想要做的東西像下面這樣表述可能會更好:

let dobstring: string = 

return serverdateformatter.string(from: dob)

}()

我認為這樣表述會清晰很多,dobstring只被提到了一次。(如果他使用的不是nsdateformatter並且需要乙個二級的解包,guard let 語句就需要第二個閉包來對stringfromdate返回的結果執行可選繫結。)

更新:蒂姆·維穆倫 寫了乙個更棒的單行**:

let dobstring = dob.flatmap(serverdateformatter.stringfromdate) ?? ""
我敢肯定這裡使用mapflatmap均可,不過前者節省了四個字元。(譯者注:這裡所說的「均可」,是在 serverdateformatter 不會返回可選型的前提下。)

強制解包看 Swift 的設計

property nonatomic,copy nsstring foo 它轉成 swift 就變成了這樣 var foo string 這樣看上去合情合理。swift 中有 string?和 string 兩種形式,但 oc 中沒有 nsstring?和 nsstring 當 swift 無法區分...

強制解包看 Swift 的設計

1 property nonatomic,copy nsstring foo 它轉成 swift 就變成了這樣 var foo string 這樣看上去合情合理。swift 中有 string?和 string 兩種形式,但 oc 中沒有 nsstring?和 nsstring 當 swift 無法...

解包kwargs python的封包與解包

將多個值賦值給乙個變數時,python會自動將這些值封裝成元組,這個特性稱之為封包 a 1,2,3 print a,type a 1,2,3 當函式返回多個數值時,也會進行封包 def test return 1,2,3 a test print a,type a 1,2,3 實踐中,很少主動使用封...