當前位置:首頁 » 服務存儲 » swift協議對接文件存儲
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

swift協議對接文件存儲

發布時間: 2023-07-23 03:47:33

A. Swift下UserDefaults的常見使用和注意事項

UserDefaults 適合存儲輕量級的本地客戶端數據,這是一種常見的數據持久化方式。(建議:如果是存儲大批量的數據不要使用這個方法)

這個方法可以基於iCloud做跨設備的UserDefaults數據存儲,參考 NSUbiquitousKeyValueStore

這個方法可以獲得當前App存儲的所有UserDefaults數據

這個通知可以在UserDefault發生改變時發出。可以考慮當這個通知發生時全局進行同步數據。 UserDefaults.didChangeNotification

在iOS7或者7以下,一般只會在app返回background的時候才會保存數據到disk,但是iOS8以及以上之後app都會在極其短的周期內去保存數據,除非極其頻繁且大規模地進行寫入的操作,一般而言都會在可接受的時間內完成這項操作。

在iOS8以及以上,讀數據大約需要0.5微妙的時間,但是寫入數據需要10倍左右的時間,需要將key-valu通過 NSPropertyListSerialization 轉化成plist data

總而言之,iOS8以及以上的系統內不太建議使用 synchronize() 方法

enum for Keys used to store data

Save in UserDefaults where you want

Retrieve data anywhere in app

Remove Values

利用UserDefaults我們可以方便地存取一些簡單的資料,然而當我們存取的資料類型是Int,Bool,Float,Double時,卻會遇到一個特別的問題。因為她們回傳的類型不是optional,所以不會返回nil,而是一個預設的值,比如0,false之類。可能我們存在一些需求,希望沒有存儲值時返回nil,那麼有兩種方式可以解決這個問題。

這個方法的返回值是不可選的,會有默認值

更多參考:

有些是返回可選類型的

使用register(defaults:)設定找不到key對應的value時回傳的預設值,比如nil

register設定的內容是暫存的,並沒有存檔,所以每次App啟動時都要再設定一次。(並且沒有設為nil這種操作,設為nil意味著取消該項的設置,後面取值時依舊會採用默認值)

通過回傳Any?的 object(forKey:) 搭配 as? 轉型判斷

這個方法返回值是可選的

比如:

由於回傳的類型是Any?,所以找不到key number對應的value時會回傳nil

參考鏈接: UserDefaults預設值

value(forKey:) 是KVC的語法,它並不是一個UserDefaults的直接方法。所以最好不要在 UserDefaults

Never use value(forKey:) on UserDefaults or Dictionary or any other class unless you have a clearly understood need to use key-value coding to get the desired result.

When you don't have such a need, use the standard access methods provided by UserDefaults object(forKey:)

再補充一點:
The value(forKey:) is not a UserDefaults-only method. It is enabled by the NSKeyValueCoding , which, According to Apple's Documentation.
NSKeyValueCoding is an informal protocol that objects adopt to provide indirect access to their properties. When an object is key-value coding compliant, its properties are addressable via string parameters through a concise, uniform messaging interface.

It happens that UserDefaults is NSKeyValueCoding compliant, so people have started (not necessarily in the correct way) using it for accessing UserDefaults.

簡而言之,UserDefaults也是遵循了 NSKeyValueCoding 協議的,所以使用 value(forKey:) 也是可以獲取到數據,但是不建議這種用法。在 UserDefaults 裡面最好使用 object(forKey:) ,這是標准用法

參考鏈接: 在UserDefaults中object(forKey:)和value(forKey:)的區別

NSUserDefaults — A Swift Introction
[NSUserDefaults synchronize] is Planned to be Deprecated

以上大多是一些需要注意的問題。關於Swift的常見用法,已經有很多博客在詳述了,可以參考: Swift:UserDefaults協議(Swift視角下的泛字元串類型API)