💬 Pofat 的話
大家午安,上週末又在瘋狂移動中,不過這週本著「波報雖然會遲到但絕不缺席」的精神延至星期二發刊,望為在北部或東部受風雨催殘的讀者注入一股暖流,下雨不能出門可以讀波報介紹的內容啊!
🌎 On Swift Community
Ask Apple
WWDC 在 Slack 線上問答的環節有不少好評,Apple 便採用相同形式推出 Ask Apple,讓開發者與官方可以有更多互動,內容有線上群聊的 Q&A 以及 25 分鐘的一對一詢問,時間是 10/17 至 10/21 ,想必有不少寶物,大家別錯過。
TCA 迎來更好用的重大更新
身為 TCA 的使用者,使用上的痛點就是大量的模版程式碼與有點複雜的組合方式,如今利用 Swift 新功能大幅度改善這些問題,新的 ReducerProtocol 使 Reducer 寫起來如同 SwiftUI 的 View,這個 protocol 同時也催生了利用 property wrapper 的 dependency 管理方式。
為了慶祝發版,他們推出一期免費的影片來介紹這些新功能,這些更新也讓 TCA 更靠近 1.0 的里程碑,剩下的最後一片拼圖則是 Naivgation 管理工具。
Where View.task Gets Its Main-Actor Isolation From
這篇文章說明了一個非常重要而官方卻沒有清楚說明的概念,View.task
會繼承它所宣告的環境而跑在對應的 thread 上,比如在 View.body
裡的 .task
會跑在 main actor 上,因為 View.body
本身帶有隱含的 @MainActor
,如果在其它 helper function 裡則會跑在共享的 thread pool 中。
例外是帶有 @ObservedObject
或 @StateObject
的 View,整個 View 都會變成自帶 @MainActor
,完全是坑的隱藏行為啊!
透過 .swiftinterface
可以看到這特性來自 @_inheritActorContext
,這點非常隱晦且蘋果官方文件也沒有標出 method 的 annotation,使得 task 執行環境理解不易,請大家務必留意。
同時 Task.init
也有一樣的情況:
此外,swiftinterface
是個挖寶的好所在,因為 @inlinable
的實作細節也會包含在裡面,比如你可以發現 .border()
其實是個帶邊框長方形的 overlay 。
Xcode 14.0 在 macOS 上會生成錯誤的 Concurrency Code
另一個 Xcode 14 的 bug,請使用 Swift Concurrency 的 macOS 開發者在 14.1 發佈前先用 13.4 。
Sketch 栽員
上週對 Sketch 來說很艱難,因應經營壓力砍了 80 多人,其中包括不少 iOS/macOS 工程師,也讓人不禁擔憂 macOS app 的市場,今年冬天將格外嚴寒。
謎底科技談創意
我很喜歡謎底科技那種小而美的產品美學,他們即將在 Apple 的線上課程分享如何打造 prototype!
🗣️ On Swift Forum
Enum Case KeyPaths
寫過 TCA 的人對他們的 CasePath 一定不陌生,雖然論壇中先前有些討論,但如今終於有人在 SE 中提出草案並附上實作 (比想像中複雜很多啊),如果要在 FP 中良好地運用 enum,這個功能實在是不可缺少。
A Possible Vision for Macros in Swift
長久以來 Swift 都沒有 macros,core team 提出了一個方案來探討其可能性與樣貌, macros 的到來究竟是染指了聖域還是天降甘霖呢?只能說講到 macros,這世界上有兩種人:
還有 the language in macros
個人對 macros 還有點陰影,它很棒可以疊疊樂做出很多酷東西沒錯,不過需要 debug 時你就想死了。
Compiling Swift generics, Part I
Swift compiler 工程師 Slava Pestov 寫了一篇關於泛型在 Swift compiler 運作原理的介紹,超級精彩!這篇文章不是在介紹怎麼使用泛型,而是怎麼做型別判斷,在 compiler 裡的結構,怎麼查詢 protocol conformance 以及如何生成簽名等,還用 Tex 製作成精美的 PDF ,簡直是寶書啊 (雖然有兩百多頁)!
一週寫一章讀書心得來充波報內好像不錯
SE-0374: Add `sleep(for:)` to Clock (Reviewing)
這個 SE 是 sleep(for:)
易用性的改善,由 TCA 兩位作者提出。
使用 Clock.sleep
的觀點常比使用 Task.sleep
直觀,但以下兩個 api 一個不能在 extension 使用一個不存在,因此這個小巧的 SE 即為此而來。
SE-0375: Opening existential arguments to optional parameters (Reviewing)
SE-0352 解決了一個 any P
本身並不遵循 P
造成的問題, compiler 知道怎麼打開 any P
,只是仍有無法針對 optional 變數打開的限制,這個 SE 即是補上這塊。
🎉 Swift Commits
本週內容已經夠多了,這部分就跳過 😜
🤪 Pofat 選推
macOS app 不能用還滿奇怪的
🤪
大家知道 RTX-4090 比 Xbox Series S 還大台嗎
RTX-9090 leak !
Philip 總是能弄出酷炫的 SwiftUI 動畫 prototype,推薦追蹤
從睡眠訣竅到掌機選購
最後,已經變成老人的上班族,已出社會的小學生,獵人 10/24 要復刊啦!!