在前面的文章,寫過了 使用 swift async/await 串接 closure 的方法,但在 WWDC23 的 State of the union 影片上,我看到了 macros 可以只使用一個 anootation 達到,還可以泛用到以前每個寫的 escaping closure,這一篇的作法,會需要在每個 escaping closure 包上 async func 才能運用,這之間的程式碼數量差距真的是太多了,讓我對 Swift 5.9 有了更多的期待。

這是原來你寫的 fetch content,使用 completion handler

completion handler

這是使用了 @AddAsync Macros 後 (@AddAsync 應該不是 Swift 原生的 annotation,應該要自己寫)

using macros

Macros 還用在哪?大量的用在 SwiftUI 上

What’s new in Swift 的影片中,我們可以看到 SwiftUI 中的 ObservableObject 未來可以用 Macros 大量的簡化,讓你少寫很多 @Published 在 property 前面。

以前寫 ObservableObject 都要在要曝露出的 property 前面加上 @Published

origin observable

現在只要使用 @Observable Macros 就可以了

Macros observable

在 WWDC23 中對 Observable 的解釋

behind observable

相信 SwiftUI 會愈來愈好寫

相關連結

使用 swift async/await 串接 closure 的方法

WWDC23 - Platforms State of the Union

WWDC23 - What’s new in Swift

Hacking with Swift 對 Macros 的介紹

Updated: