

Discover more from 波報 | Pofat 的 Swift 中文電子報
💬 Pofat 的話
Apple 終於趕在四月前公佈 WWDC23 時程,今年的視覺挺引人暇想,一圈一圈的弧形很像光於某種透鏡中的折射,排列呈現的角度也不禁讓我聯想到 AR/VR 眼鏡或頭盔的視角,不過我個人無根據地覺得今年還是不會發表,感覺還早了點(again,無根據)。
今年還是有一起看的活動,太想念實體的話趕快去參加抽籤!
🌎 On Swift Community
Swift 5.8 正式發佈
這個版本包在 Xcode 14.3 正式版中發佈,也開始為 Swift 6 做暖場,從這版開始便能透過 -enable-upcoming-feature X
來啟用實驗中的新功能,在程式碼中也能用 #if hasFeature(FeatureXIdentifier)
來處理新功能啟用與否的情況,SPM 也支援宣告需要的實驗功能,其它語言層面與 standard library 的新增功能見此,也可以參考 Hacking with Swift 的圖文並茂說明。
SwiftUI 開發者也會對 5.8 感到開心,這版重新實作了 Result Builder
的 type check,不僅大大地加速了其效能,也在錯誤發生時能生成更精準的資訊而不只是毫無頭緒的錯誤訊息( error: the compiler is unable to type-check this expression in reasonable time
)。
最主要的改進來自於多行 closure 的泛型型別推斷,原本採用 closure 呼叫方解析完後再來套用型別的 top-down 方式,因此編譯器對 closure 內部的資訊完全不得而知,自然也無法生成有幫助的錯誤訊息。新實作利用 SE-0326 Enable multi-statement closure parameter/result type inference 讓每個多行 closure 依其內容獨立解析其型別並將資訊傳遞出去以助型別推斷,其實這是僅一行內容的 closure 的推斷方式,如今讓多行的與其行為一致。SwiftUI 程式總是帶有大量的泛型參數與一層套一層的俄羅斯娃娃closure ,可想見新實作能發揮的威力不同凡響,更多細節可以參考這篇。
5.8 新功能和體驗改善兼備,相信會是個讓開發者舒服的版本,只是其容器 Xcode 14.3 再也不支援以 Rosetta 模式執行,可能又會痛到部分開發者,而 Xcode 的 release note 相信這週的 13 電子報會帶給你詳細的說明,波報就不贅述。


WWDC23
今年將於六月五號到九號舉行,形式如同去年,採取線上加部分實體交流活動,包括一起看 keynote 與 Apple 團隊交流等,有興趣可以到此用開發者帳號參加抽籤。
Apple 47歲,是個型男大叔了
Apple 初代目成立於 47 年前的愚人節,若在當時提出現在的 Apple 產品功能,大概都會被當成愚人節笑話呢。
Improving Multiplatform SwiftUI code
SwiftUI 雖然標榜可多平台共享程式碼,但傷害最多的地方之一也在於此,Jesse Squire 先前寫了一篇 Sharing cross-platform code in SwiftUI apps ,利用 typealis
和 extension
來把 #if os
這些判斷從 call site 中移除以更乾淨地使用;這次對於「同一個類型,其值依平台而有不同」的設定(比如 .padding
)提出了有趣的想法, 新增一個基本類型的 initalizer init(iOS: Self, macOS: Self, watchOS: Self)
,把煩人的 OS 判斷包在裡面 。
開發 macOS 安全軟體是什麼感受
總之,#太傷害了。





SwiftUI 折騰學習筆記
Justin 最近在研究 SwiftUI 開發 macOS app ,又是令人期待的連載系列,會不會也變成 Fxxx 系列呢?讓我們看下去。
(註:個人認為文中提到在 SwiftUI 中依賴底層 AppKit/UIKit 來做事的方法很危險,也和 SwiftUI 的 mindset 互相衝突,只是元件的高度可控性絕對是開發者的剛需,但跨平台的目標使其目標都放於高階的 api ,目前解法只有各種 workaround,包含 instrospection。我認為這就是 SwiftUI 內最大的衝突和開發者訐譙的源頭,開源也許是個解法但蘋果不可能做這件事)
🗣️ On Swift Forum
[SE-0382] Default arguments for macros and macro implementations
SE-0382 定義 Swift macro 的基礎使用,而目前還有個預設值的設計問題,如果僅把預設值定義在 macro 宣告端,對使用者來說過於隱晦,預設行為是最應該被溝通清楚的部分,總是跳到宣告處查看並不是好的體驗。目前作者的兩個想是:
在呼叫端再寫一次,但這就像是沒有預設值
在 macro protocol 定義新的實作介面提供預設值定義,不過仍有些問題未解或因此增加,比如預設值如何取得,如何精準地定位要提供預設值的參數等。
有想法的不妨到論壇發表意見,也許能為 Swift macro 注入新的活水。
🤪 Pofat 選推
iPhone 小技巧:用這個 shortcut 可以把「已儲存的密碼」做成捷徑加到首頁


當 SEO 大師開餐廳
Twitter 最近開源了他們的推薦演算法,其中一個功能是可以濾掉 Elon Musk 的推文 #AprilFool
音索小子最新力作,豪豬他死了。
「音速小子謀殺事件簿」,Steam 免費下載開放中。 #NotAprilFool