💬 Pofat 的話
這次的發表會對使用者們有小驚喜,對開發者卻有很多大驚喜!
祝大家都能平安閃坑,太多傷害的話也可以一起來認識 Swift 5.7 的新功能吧,都做好了應該不會再出事吧。
此外可能因正式發表在即,Swift 的 commits 也多是 cherry-pick 到 Swift 5.7 的修復,本期 commit 專區就略過。
🌎 On Swift Community
你給翻譯翻譯,什麼叫驚喜
首先 iPhone 14 Pro 和 Apple Watch Ultra 都有新的解析度,雖然差異不大但不用 Xcode 14 編譯的話會有細微黑邊。
有新的解析度當然就...
再者,因為 macOS Ventura 延期,所以 Xcode 14 RC 的 macOS SDK 仍是 12.5,所以最新的 Swift 功能(primary associated type)就失蹤了...
送審時記得更新說明裡盡量避免提到 iOS 16 喔
最後,可能是為了保密動態島(為 Live Activity 的一部分),Live Activity 在 Beta 6 之後就不在了,雖然有預告它本來就不會在初期正式版本,但這樣的發版策略實在有點混亂,在前期已送出 TestFlight 的 app 當使用者更新 iOS 後就會閃退。
感謝衝鋒大將軍 Ying Zhong 熱血地為廣大開發者們踩坑,也向大家推薦他的作品 Taio - 一款精雕細琢、具有職人精神的 Markdown 與文字編輯器。
Swift 5.7 新功能
Xcode 14 正式版不遠矣,看到週報時應該已發佈,正是好時機來了解一下對應的 Swift 5.7 有哪些新功能,個人認為 Clock、Instant 以及 Duration 值得了解,時間應該是大家日常工作會碰到的事。
Paul Hudson 整理了一份很讚的清單,並附上了 playground 以利大家快速把玩新功能,非常推薦。
SwiftParser 正積極地進行世代交替
Swift core team 正把以 Cpp 實作的 SwiftSyntaxParse 替換成 Swift 實作的 SwiftParser,新版本的效能看起來也要追上 Cpp 的版本。目前打頭陣的是 swift-format
,已經有 PR 全面替換。
Closure 其實是誤稱
Swift 人常說匿名函數是 closure ,但其實應該是匿名函數採用 closure expression 才對。
用 Markdown 寫 Codable
工程師應該都很愛寫 Markdown ,有人愛到用來取代 JSON 做為 Decodable 的輸入,以及 Encodable 的輸出,以對物件結構的資訊有更優秀的表示能力,滿有趣的。
SettingsKit
推友做了一個讓你可以建立與系統設偏好設定長一模一樣選單的工具。
DocC 做的 Tutorial
讀起來就像 SwiftUI 的官方文件 ,有 code diff 與對應的效果圖,不了解 DocC 的 tutorial 可以做到什麼地步的不妨體驗一下,有興趣研究的人可以在此找到程式碼。
🗣️ On Swift Forum
SE-0372: Document Sorting as Stable (Reviewing)
這個提案很可愛,沒想到改註解文件也需要過提案流程!
Swift 5 把 Array 的排序演算法從不穩定的 Introsort 換成穩定的變異版Timesort(有興趣可研究相關 PR ),可是文件卻沒有改!這個提案就是在相關地方的註解文件標明排序是穩定的(即相等的元素在排序後相對順序不變)。
[Pitch] One-Element Tuples
單一元素 Tuple 聽起來很衝突,這是為了 variadic generic 才有的產物,這個擱置已久的待辦功能總算動起來了。
首先 Generic 的容器可以用來裝單一個值, one-element tuple 的用處不大所以目前 Swift 沒有這東西,寫了也直接被視為一個普通的值。但 variadic generic 出現後情況就不同了,比如下面的函數:func makeTuple<T...>(_ elements: T...) -> (T...)
如果這時候我們泛型裡只放一個整數 ,那回傳結果應該是包含一個 Int 的 one-element tuple 、還是 Int ? 若要做到後者,雖和現在的行為一致但是會引入潛在的轉換過程,而避免更多的潛在轉換是目前共識。對應的提案就是允許 one-element tuple 存在。
與其它 tuple 相同,可以寫做有標名 (labeled)與匿名的 (unlabeled),只是匿名部分為了與現在函數型別的語法區分,比如 (Int) -> Int
,提議採用 (_: element)
的型式。
這個功能已經實做,只要餵 compiler -enable-experimental-variadic-generics
便能啟用。
Selective control of implicit copying behavior: take
, borrow
, and copy
operators, @noImplicitCopy
SE-0366: Move Function + “Use After Move” Diagnostic 先前因命名的緣故被打回重新規劃,一個可能的方向是將改為更直觀的 @noImplicitCopy
或 @explicitCopy
。
🤪 Pofat 選推
原來 iPhone 14 宣傳影片不是 iPhone 14 拍的啊
我是作者。
(Jessie Lam 是無敵少俠的動畫師,btw 這部我超推薦,血肉橫飛劇情又有鋪陳到高點,我在飛機上一口氣看完第一季)
Oh really?
SwiftUI 裸視 3D 文字效果,第一次聽到 variable font
想去動態島玩
超精細的細節,動態島底下的漸層模糊
汪洋之中唯我一動
近一甲子的等待 (女王RIP,有生之年再無女王)