💬 Pofat 的話
最近發現,越多的自我對話越有機會激發出火花,而最佳的自我對話時機是有氧訓練,比如慢跑。前陣子各種事情上感覺有點卡住,所幸曠野之息激發我出門訓練的動力,便有了些許的對話時間,也逐漸併出點出口的靈感,最重要的是意識到自己只是在像自動導航般地做事,沒留太多時間思考,推薦給也在經歷靈感枯竭的讀者,洗澡之外還可以試試耐力運動。再分享一個冷知識,大家知道電腦科學之父圖靈同時也是個優秀的長跑者嗎?他常利用長跑思考問題,在劍橋最投入訓練時其固定練習路徑長達 50 公里,他還參加過 1948 年奧運的馬拉松選拔,跑出了 2 小時 46 分的成績,雖然現在看這個成績只是還不錯的業餘水準,但這只比當年金牌慢十分鐘,大師就是大師,腦和腿都比常人快很多啊!(Turing as a runner)
還有波報上週破千訂閱了,也算達到一個里程碑,謝謝大家,喜歡波報的請考慮贊助我來支持我的寫作。
🌎 On Swift Community
給 Objective-C 的情書
從 Ruby 轉換到 Objective-C 的工程師發現兩者驚人的相似之處,萬物皆 Object,以及豐富的 runtime api,雖然 Apple 在 2014 年開始頭也不回地奔向 Swift,但 Objective-C 仍然在 iOS 16中佔有 66%,成熟且靜默地支撐著這個生態系。
https://thoughtbot.com/blog/a-love-letter-to-objective-c
改變 NavigationLink 的 accessory view
UITableViewCell 可以讓你定義自已的 accessory view (預設是 〉
),但 SwiftUI 你只能使用預設的 〉
,終究還是要搞個透明 view來負責 Navigation 功能,上面放你想要的自定義 view,透明 view 始終是 SwiftUI 開發者披荊斬棘不可缺少的神兵。
https://www.jessesquires.com/blog/2023/07/18/navigation-link-accessory-view-swiftui/
停止為 UserDefaults 的 key 加上 bundle id 前綴
有些人會為 key 的名稱前加上 com.mycompany.MyApp
,這其實是不必要的,另外要注意的是,若你身為一個 framework 開發者,且也會存取 UserDefautls 時,請避免操作 UserDefautls.standard
,以免和使用端存取到重複的 key name。
https://www.jessesquires.com/blog/2023/07/17/stop-prefixing-userdefaults-keys/
圖解 SwiftUI 的 matched geometry effect
這個複雜的名詞看圖就很容易理解了
https://twitter.com/BigMtnStudio/status/1681645265730564106
🗣️ On Swift Forum
[Roadmap] Language support for view types (BufferView)
Swift 想要打入系統層的世界,高效和安全性是必要,而一個常見卻不夠安全與高效的使用情是,存取底層的存儲(就是讀一堆 bytes 時)。
這類的操作都都需要抽象容器,而容器提供通用 api 來提供存取,利用 Collection 中的 Slice 就是很好的實現方針,因為你可以透過熟悉的 api 來移動存取範圍,但是 Slice 需要確保容器活著,因此需要一個隱藏的 reference,這不旦增加管理成本 (reference counting),也讓容器的生命週期無法獨立於 api ,如果是沒有 ARC 管理的記憶體,又得使用 UnsafeRawBufferPointer
這樣不安全的類型。
BufferView
旨在替換現存的 Unsafe 系列 api 以達安全,以及能夠使用更高效的儲存方式(比如 stack),跨模組邊界的通用溝通,並且支援為安全與效能而生的 non-copyable 與 non-escaping。
這篇並非一般的 evolution proposal,它是放在 visions 的資料夾下,所以講的是一個大方向,未來應會有數個 proposal 來實現。
[Pitch] SE-0404 Pack Iteration
SE-0393 帶來了 Type Parameter Packs (就是 variadic generic),雖然可以讓我們用一個表達式代表一組泛型列表,但 Swift 會一次解析表達式中的所有泛型,若你想做「比到不相同的就中斷操作」這類的操作,目前只能再寫一個泛型方法執行比較,並且用 throw Error
的方式來在不相同時中斷操作,這很不自然,所以 SE-0404 就是要可以對泛型值的列表做 for-in
,才夠 Swifty。
https://forums.swift.org/t/pitch-enable-pack-iteration/66168
Swift Macro Toolkit: Making macro development a breeze
Swift macros 功能雖強大但實際開發起來卻沒那麼好寫,你必須先理解 SwiftSyntax 這個框架、如何抽出類型的資料以及如何組裝最後的型別。而 Swift Macro Toolkit 旨在提供更高階和易懂的 API 來讓開發更容易,目前仍是早期開發的階段,提供更容易處理類型的功能很棒,看下圖就能明白其好處。
不過如果你仍想自已從頭開始打造 macros,我強烈推薦用 Swift AST Explorer來幫助你理解 AST,才知道怎麼去取得或操作程式碼結構。
🤪 Pofat 選推
Apple GPT 幫你 file a radar 聽起來非常實用
https://hachyderm.io/@SmileyKeith/110741803193707290
工程師的自信感震盪如雲霄飛車