

Discover more from 波報 | Pofat 的 Swift 中文電子報
💬 Pofat 的話
上週末是歐洲的復活節假期,我趁機溜去巴黎玩耍,這期也在歐洲開始上班的週二才發刊。
我並不是會為大城市傾心的人,但巴黎的人文底蕴實在令我讚歎不已,發現了不少可用來做遊戲的元素😃!走在奧賽美術館的雕塑大廳時突然驚覺,這不就是「地平線:西域禁地」遊戲後期經過的藝術長廊嗎?
「瘟疫傳說」系列作將瘟疫源頭歸因於血脈傳承的超自然力量,而1869年的油畫「Peste à Rome」訴說著截然不同的起源:「羅馬城已萬劫不復,當門被敲響幾下,屋內就有幾人死去。然而立於門外的不是死神,是善天使指揮著持長予的惡天使,聯手散播死亡。瘟疫,乃神罰。」
我立視良久無語,想著:
「這很適合拿來做小遊戲耶,換皮的打地鼠嘛!」
(想看畫由此去)
🌎 On Swift Community
來土炮瀏覽器吧
謠言指出蘋果今年將允許非 WebKit 為底的瀏覽器引擎,Jason Brennan 這位勇士便用 Swift 土炮出了一個 HTML parser,再用 SwiftUI 畫出節點,我建議對 parsing 相關知識和技術有興趣的人跟著一起敲程式碼,對吸收更有幫助,這部分內容都在 part 1, 而 part 2 則是 SwiftUI 渲染的部分,複製貼上比較沒有損失🤪。
如何探索新的 iOS codebase
這是針對 UIKit codebase 的建議,剛開始接手 codebase 時總需要找出「這個畫面的程式碼在哪裡」,SwiftUI 的 preview 多少減輕了這個問題,但 UIKit 可沒有這優勢。Jesse Squire 利用 symbolic breakpoint 和 filter debug message 的組合技快速地定位現在看的畫面是哪些 class,非常實用。
同時也要再一次地推薦 Chisel ,一直以來它都是我調整、除錯和探索的最佳工具(也可以用來完成上述找 view class 的工作),它可以在console 印出當前所有 view 的樹狀結構、動態加邊框、隱藏或顯示某個 view ,還可以動態改變 view 屬性和預覽截圖,這些都是很棒的探索工具,為你在茫茫 code 海中指路。
SwiftUI 遇到 any Foo<Bar> 記憶體用量會不停增長
Xcode 14.2+Swift 5.7 和 Xcode 14.3+Swift 5.8. 會遇到的 SwiftUI bug,如果在 SwiftUI.View
裡使用了帶 primary associated type 的 existential type,如 any Foo<Int>
,body 會無窮地重算取值造成 app 無反應。
🗣️ On Swift Forum
SE-0394: Package Manager Support for Custom Macros (Reviewing)
這個提案乃是銜接 SE-0382、拓展 Macro 宇宙的重要一環,Macro 的威力如何讓它擴散出去,答案是變成 Swift Package 的一部分讓更多專案能共用,以一個不太一樣的型式:
以新的
macro
Target 型態存在 package 裡macro 相似 package plugins,其定義會被編成一個獨立執行檔,編譯器在編譯過程中有需要時會執行它,而且會在 sandbox 中被執行,避免網路或磁碟存取,這些 macro 需要盡可能地獨立運作才不會干擾編譯過程
macro 會依賴
SwiftSyntax
而 SwiftPM 的依賴解析範圍是整個 workspace,所以其中所有 macro 都會依賴同一版,縰使你還是能各自定義不同依賴版本macro 能像其它 Target 一樣有依賴,只是必須為 statically linked,dynamic framework 不能被作為依賴。
可以測試
使用依賴 macro 的 library 時也能存取 public macro
提案中的範例仿照 #colorLiteral
做了 #fontLiteral(name: "Comic Sans")
,由此可見這功能對於 framework 開發有多少威力,模版程式碼將被這工具大幅度減少。
[Pitch] is case expressions
一直致力於簡化 Swift 語法的 Cal Stephens 這次和 Matthew Cheok 聯手提出了大家要求已久的 is case
,因為現在 if 條件式中無法直接比較 enum case ,還需要手動讓欲比較的 enum 遵循 Equatable
,而這個提案相當簡單,就是可以直接
if foo is case .bar(42)
當然支持!
🤪 Pofat 選推
(據說 Twitter 出了問題,所以如果以下看不到預覽請怪推特)
Simulator 中開 simulator,讚👍
https://twitter.com/lexrus/status/1643123939978125315?s=20
復活節復活的是⋯⋯ (留言各種異形抱臉蟲梗很讚)
https://twitter.com/Oatmeal/status/1119991085785157633?s=20
Shut up and take my money
https://twitter.com/CommodoreBlog/status/1644055374805229568?s=20
太傷害了 SwiftUI
https://twitter.com/krzyzanowskim/status/1643210287317753857?s=20
https://twitter.com/krzyzanowskim/status/1643213429723865091?s=20
本月底發行的絕地:倖存者可以摸 bogling,玩了
https://twitter.com/CanYouPetTheDog/status/1642963827296964608?s=20