昨天大略介紹了 UserDefault 以及使用方式,那想在 SwiftUI 裡使用 UserDefault 還需要一個特殊的東西,就是今天要介紹的 @AppStorage。
@AppStorage 正確來說是用來存取 UserDefault 裡某個特定的值,並且會在值變化時通知畫面去做更新。有點像是 UserDefault 跟 @State 的結合,但是相比 UserDefault 它能儲存的類型比較少,目前只有 Bool、String、Data、Int、Double、URL 這六種而已。
而 @AppStorage 的使用方法就像下圖那樣在括號中放入你要使用的 Key,後面設定好他的預設值。
而 @AppStorage 他的投射屬性是 Binding 的,所以是可以利用 @AppStorage 將某些元件的值跟 UserDefault 綁定在一起的。
到這裡可以了解,在 SwiftUI 中,想對 UserDefault 的值進行操作主要都是透過 @AppStorage 進行。
介紹完 @AppStorage,再來多介紹一個跟它很像的 Property Wrapper,@SceneStorage。
@SceneStorage 跟 @AppStorage 雖然很像,但它們還是有很大的不同。
首先,@AppStroage 的底層是 UserDefault,它的用途主要是用來存取整個 App 都會使用到的資料,而 @SceneStorage 的底層不是,它的底層是一個未公開的 API,而且 @SceneStorage 的功能雖然也是存取資料,但它存取的資料只會用於狀態回復。
再來就是 @SceneStorage 內存取的資料會在 Scene 被關閉時清除,換句說法就是 @AppStorage 內存取的資料在你關閉 App 之後依舊會存在底層的 UserDefault 裡,而 @SceneStorage 裡的資料在關閉 App 時是會跟著一起被清除的。
最後也是我覺得比較重要的一點就是 @SceneStorage 最好不要用來存取一些敏感資料,因為它其實不是很安全,這點在使用時要格外注意。
那今天就介紹到這裡,明天介紹什麼好呢?