💬 Pofat 的話
上週延期至本週一併出刊,很多人誤以為我和 13 一起打電動才沒寫週報,真相是我們兩個都忙炸,已經很久沒連線了!讀者們如果有推薦的連線遊戲歡迎介紹給我們。前前兩週剛好沒什麼大事,倒是上週跑出不少新內容,新的 HIG, 早期泛型提案以及 NSSpain X 的議程影片,挑些喜歡的內容在家躲秋老虎吧!
🌎 On Swift Community
新 HIG 上線
Charing Data
https://developer.apple.com/design/human-interface-guidelines/patterns/charting-data
Live Activities
https://developer.apple.com/design/human-interface-guidelines/components/system-experiences/live-activities
NSSpain X 影片上線
議程影片全部上線,我個人第一眼有興趣的是:
Composable Architecture at Scale
Lessons learnt rewriting SoundCloud in SwiftUI (好笑到哭了,但還沒看完下期週報再來分享心得)
Lessons from Mobile Networking at Scale
SwiftUI Navigation & URL Routing
SwiftUI 在 iOS 16 僅用 60Hz 的速度繪圖
看來是個 bug 且目前沒有 work around,在 iPad Pro 上能達到 120 Hz
iOS 上 SwiftUI 最高只以 60Hz 的速度在繪製而已,而 UIKit 在 iOS 15.4 就能達到
純 SwiftUI 打造的 3D 物件動畫 Library
這個開發者之前才用 ShazamKit 做出彈琴時會自動翻譜的 app,這次則是做出像遊戲引擎裡會看到的 3D 動畫套件。
SwiftUI Style 的 UIKit 語法
老實說現在寫回宣告式與命令式混合的語法滿痛苦,不過依 iOS 16 的混亂現況來看,在 SwiftUI 的黑箱中眷戀純粹語法的甜美也是種傷痛🥲
This week I Learned
Swift 迭代小技巧
AirPods Pro 2 盒子充電時可以開啟提示音,讚
COBOL 有多勇?可能也是打造時的背景硬體能力非常有限,需要格外謹慎
Value types 、或者說 copy-on-write 可以拯救你的人生
🗣️ On Swift Forum
SE-0373: Lift all limitations on variables in result builders (Reviewing)
目前的 result builder 只能用最常見的方式來宣告 local variable:一次一個,一定要有個儲存變數的空間及初始化的的表達式(代表不接受 computed 或 lazy variable),這 SE 將解開這些限制,還允許 property wrapper 的語法。
最後這點我認為是最有潛力的改進,但可能會引入令人困惑的操作空間,比如在裡面放入 @State
會是語法上允許卻沒有作用的。
Parameter Pack (Pitch)
社群期待已久的 variadic generic 終於有了更新,以新名稱和更具體的定義出發,分別為宣告型別的 Type parameter packs (以 <> 包起來的部分)與使用的 Value parameter packs,其中 ...
都表示「零或多個」的用法,比如:
Type 的部分可以擴充,比如 typealias G<E...> = (Array<E>...)
這樣的宣告中,G<Int, String> == (Array<Int>, Array<String>)
;同時也可以加上型別的限制:
Value 的用法則同理,但多個種類時在 function 的參數一定要用外部的 label 來區隔,不能使用 _
還能透過傳給其它 function 來擴充,或者直接 iteration 所有值
這仍是早期提案,目前還有許多開放問題探討中,既然是新語法那當然大多的問題還是在語法本身,比如 pack 裡 ...
的使用和一般 parameter 的 ...
混用時看起來很 🤢
🎉 Swift Commits & Issues
[SE-0365] Allow implicit self for weak self captures
先前在 weak self closure 可以在 unwrap 後省去 self 的提案,看似單純背後卻發現了一個 type check 的 bug ,因為隱含的 self 是寫死在 non-optional,為了避免誤用要由 type checker 發出新的錯誤診斷說明,因此這個功能只能放到 Swift 6 上。
Miscompile on synthesized equatable when compiled with optimizations on arm64(iOS)
有點恐怖的 Swift bug,如果 xcframework 用舊版 compiler 編譯(如 Xcode 13.4),然後主 app 用 Xcode 14 開啟最佳化 -O 編譯,會發生 Equatable 生成的實作錯誤而得到錯誤的結果。
🤪 Pofat 選推
「快速迭代」、「我們都敏捷開發」、「公司一直求變求新」
工程師覺醒三部曲
動態島功用也是動態的
「嘿 iOS 16 最新的 Lock Screen 如何啊?」
遊戲「雙人成行」的導演賣關子!!
最後和大家分享 Becca Royal-Gordon 加入 Swift compiler team 的小故事