[Swift 中階 #8] Swift KeyPath 總結:map(\.name) 的原理
\.name 不是 map 的縮寫語法,而是獨立型別 KeyPath 的值。本文整理將屬性存取轉成值的意義、唯讀、值型別寫入與參考型別寫入三個層級,以及實務上的應用場景。
閱讀文章LANGUAGE · 52 ARTICLES
按新舊順序瀏覽 Swift 語言 文章。
所有文章
\.name 不是 map 的縮寫語法,而是獨立型別 KeyPath 的值。本文整理將屬性存取轉成值的意義、唯讀、值型別寫入與參考型別寫入三個層級,以及實務上的應用場景。
閱讀文章屬性包裝器不是 SwiftUI 語法,而是 Swift 5.1 透過 SE-0258 引入的語言功能。本文整理編譯器如何翻譯 @Clamped、wrappedValue 與 projectedValue($) 的真相,以及避免濫用的界線。
閱讀文章從 Codable 自動合成實際產生的內容,到實務必遇到的鍵名不一致、日期格式、巢狀結構、部分失敗四種情境的標準解法,以及 DecodingError 偵錯,一次整理。
閱讀文章map·filter·compactMap·flatMap·reduce 五個函式的區別,在於閉包回傳的內容。本篇整理與 for 迴圈的選擇標準、鏈式呼叫產生的中間陣列,以及 lazy 序列所解決的問題。
閱讀文章關聯型別(associatedtype)是協定中預留的型別空白。本文整理著名 generic constraint 錯誤的原因、SE-0309 與 SE-0346 如何解除限制,以及 primary associated types 的使用方式。
閱讀文章方法置換是在執行階段交換連接選擇器與 IMP 的對照表的技術。本篇整理慣用的完整實作、_cmd 說謊的副作用,以及可使用到什麼程度的界線。
閱讀文章查看 Swift 5.6 之後的程式碼,會看到協定名稱前面加上 some 或 any:some View、any Error、some Collection。以前可以直接把協定名稱放在型別位置,但現在編譯器會警告或報錯,要求加上 any。…
閱讀文章第一次在 Swift 程式碼中遇到角括號 <T> 時,視線會停頓一下。函式名稱旁多了一個大寫字母,打開文件後,還會看到 func map<T>( transform: (Element) -> T) -> [T] 這類簽章。泛型是 Swift 中階的入門關卡…
閱讀文章閱讀 Swift 文章或版本資訊時,常會看到 SE-0296、SE-0345 這類代碼。介紹 async/await 的文章會標示 SE-0296,討論 if let name 縮寫語法時則會標示 SE-0345。這些編號究竟是什麼?
閱讀文章打開 Swift 標準函式庫,會發現一件醒目的事:Int、Double、Bool 等基本型別,以及 String、Array、Dictionary、Set,全都是 struct。在其他語言中理所當然是類別的型別,在 Swift 裡全都是值型別…
閱讀文章Swift 存在一種奇妙的共存:初學者能在 Playgrounds 用一行 print("Hello") 開始學習,但同一種語言也用來撰寫交織著泛型與巨集的標準函式庫。小學生的程式設計教育 App(Swift…
閱讀文章