💬 Pofat 的話
又是 Apple 開發者們一年一度的祭典,這週一定會有各種過載資訊來轟炸,不過大家也別焦慮,我會建議大家懷著輕鬆的心情,最好和朋友們自已搞個 watch party,搞些派對食物一起輕鬆地看 keynote ,sate of union 或 sessions,消化有興趣的東西或等著某 podcast 的新節目(?)就好,同時我也推薦報名 WWDC 23 Activies,我記得往年是叫 Digital Lounges ,但今年改名不知是否代表會有更多不同的互動形式?總之若你沒有自己的 watch party,你有機會和各國開發者們一起線上 party,獲得即時的問答,錯過也完全不用在意,每年都有人整理裡面的問答內容到 Github,總之抱著愉快的心情一起過吧!
p.s. 本期排程出了點意外,所以才沒在原本預定時間送出,還好有趕上發表前。
🌎 On Swift Community
Using Upcoming Feature Flags
Swift 5.9 正式發佈就在明天(本期週報收到的隔天凌晨), 官方也再次宣傳 5.8 中由 SE-0362 引入的功能,新功能相關的 SE 都會擁有一個標籤,可以傳-enable-upcomaing-feature NewFeature
來啟用還未正式支援的功能,同時呼叫方(call site)也能透過 #if hasFeature(NewFeature)
的編譯條件來撰寫不同的分枝。可以分別在 Xcode、xcconfig 與 Swift package manifest 中啟用,讓開發者更早開始準備遷移程式碼。
What’s new in Swift 5.9
HackingWithSwift 每年此時都會準備詳細的清單(而且他們正在五折活動中,受過照顧的可以支持),我認為新東西中對於開發體驗有最大影響的就是 Swift Macro 了 (SE-0382,SE-0389 和 SE-0397,波報都有介紹過嘿嘿),雖然跟 Obj-C 一樣都是透過關鍵字來讓編譯器換成更複雜的程式模版或運算結果,但能力和原理很不相同。Swift Macro 除了傳統用法外,還能改變函數的簽名(增加變數),改變宣告(在變數套上標籤),透過新的 Protocol CompilerPlugin
來回報 Macro 名稱,compiler 會直接算出結果插入,macro 宣告中的程式碼就不會被放入 app 中(比如是生成的字串結果,而不包含過程的程式碼),值得一提的是 SE-0394 可以讓 macro 以 dylib 的方在 Swift Package 裡共用,不過這個不在 5.9 裡。
除此之外,5.9 正式出現 ownership 相關的功能,NonCopyable protocol ~Copyable
(顧名思義就是不會)和 consuming、borrowing 等用來控制生命週期的 operator。相信大家多聽過 Swift 的 value type 會 copy on write ,但 copy 後原本的東西去哪了,會活多久我們都無法察覺,這些新功能正是給開發者控制的能力,雖然我相信大多 iOS app 開發者可能不會用到,反倒是新的 switch 語法會更常出現在開發日常中。
🗣️ On Swift Forum
[Pitch] Allow Protocols to be Nested in Non-Generic Contexts
Nested type 一直是被大家用來做為 namespace 的一種替代手段,可惜目前不支援 protocol ,最主要還是泛型的情況很難處理,那沒泛型的情況下總該支援吧。有趣的是現在你可以用 typealias 來達到相似效果。
[Accepted] SE-0377 Make borrowing
and consuming
parameters require explicit copying with the copy
operator
只是想提一下這個提案趕在 WWDC 前接受,並順理成章成為 5.9 的正式成員,頗有蕃茄醬工作法的味道(讚賞)。
🤪 Pofat 選推
「WWDC 別出新功能了,東西修好不好嗎?」相信是不少開發者的心聲 (點圖進原推)
不知道以前有沒有,但 Flighty 建了可以看到開發者們要從哪些國去 WWDC 的地圖,好酷!
有台灣,是咱們的 Student Challenge 獲獎者嗎
WinRAR,永遠的佛心軟體,立刻就購買授權救救它吧(註: Win11 開始內建 RAR 解壓縮)