Swift 5+
Không có câu trả lời nào thực sự bao gồm chi tiết về khả năng lưu trữ cục bộ mặc định. Nó có thể làm nhiều hơn là chỉ chuỗi.
Bạn có các tùy chọn sau trực tiếp từ tài liệu apple để lấy 'dữ liệu' từ mặc định.
func object(forKey: String) -> Any?
//Returns the object associated with the specified key.
func url(forKey: String) -> URL?
//Returns the URL associated with the specified key.
func array(forKey: String) -> [Any]?
//Returns the array associated with the specified key.
func dictionary(forKey: String) -> [String : Any]?
//Returns the dictionary object associated with the specified key.
func string(forKey: String) -> String?
//Returns the string associated with the specified key.
func stringArray(forKey: String) -> [String]?
//Returns the array of strings associated with the specified key.
func data(forKey: String) -> Data?
//Returns the data object associated with the specified key.
func bool(forKey: String) -> Bool
//Returns the Boolean value associated with the specified key.
func integer(forKey: String) -> Int
//Returns the integer value associated with the specified key.
func float(forKey: String) -> Float
//Returns the float value associated with the specified key.
func double(forKey: String) -> Double
//Returns the double value associated with the specified key.
func dictionaryRepresentation() -> [String : Any]
//Returns a dictionary that contains a union of all key-value pairs in the domains in the search list.
Dưới đây là các tùy chọn cho 'cài đặt'
func set(Any?, forKey: String)
//Sets the value of the specified default key.
func set(Float, forKey: String)
//Sets the value of the specified default key to the specified float value.
func set(Double, forKey: String)
//Sets the value of the specified default key to the double value.
func set(Int, forKey: String)
//Sets the value of the specified default key to the specified integer value.
func set(Bool, forKey: String)
//Sets the value of the specified default key to the specified Boolean value.
func set(URL?, forKey: String)
//Sets the value of the specified default key to the specified URL.
Nếu đang lưu trữ những thứ như sở thích và không phải là một tập dữ liệu lớn thì đây là những lựa chọn hoàn toàn tốt.
Ví dụ kép :
Cài đặt:
let defaults = UserDefaults.standard
var someDouble:Double = 0.5
defaults.set(someDouble, forKey: "someDouble")
Bắt:
let defaults = UserDefaults.standard
var someDouble:Double = 0.0
someDouble = defaults.double(forKey: "someDouble")
Điều thú vị về một trong những getters là từ điển Xuất hiện , trình getter tiện dụng này sẽ lấy tất cả các loại dữ liệu của bạn bất kể chúng là gì và đưa chúng vào một từ điển đẹp mà bạn có thể truy cập bằng tên chuỗi của nó và đưa ra loại dữ liệu tương ứng chính xác khi bạn yêu cầu nó trở lại vì nó thuộc loại 'bất kỳ' .
Bạn cũng có thể lưu trữ các lớp và đối tượng của riêng mình bằng cách sử dụng func set(Any?, forKey: String)
và func object(forKey: String) -> Any?
setter và getter tương ứng.
Hy vọng điều này làm rõ hơn sức mạnh của lớp UserDefaults để lưu trữ dữ liệu cục bộ.
Về lưu ý về số lượng bạn nên lưu trữ và tần suất, Hardy_Germany đã đưa ra một câu trả lời tốt về điều đó trên bài đăng này , đây là một trích dẫn từ nó
Như nhiều người đã đề cập: Tôi không nhận thấy bất kỳ giới hạn SIZE nào (ngoại trừ bộ nhớ vật lý) để lưu trữ dữ liệu trong .plist (ví dụ: UserDefaults). Vì vậy, nó không phải là một câu hỏi NHIỀU.
Câu hỏi thực sự là LÀM THẾ NÀO khi bạn viết các giá trị mới / thay đổi ... Và điều này có liên quan đến việc hao pin mà việc ghi này sẽ gây ra.
IOS không có cơ hội tránh ghi vật lý vào "đĩa" nếu một giá trị duy nhất thay đổi, chỉ để giữ tính toàn vẹn dữ liệu. Về UserDefaults, điều này khiến toàn bộ tệp được ghi lại vào đĩa.
Điều này sẽ tăng sức mạnh cho "đĩa" và giữ cho nó hoạt động lâu hơn và ngăn iOS chuyển sang trạng thái năng lượng thấp.
Một điều khác cần lưu ý như được đề cập bởi người dùng Mohammad Reza Farahani từ bài đăng này là bản chất không đồng bộ và đồng bộ của userDefaults.
Khi bạn đặt một giá trị mặc định, nó sẽ thay đổi đồng bộ trong quy trình của bạn và không đồng bộ thành lưu trữ liên tục và các quy trình khác.
Ví dụ: nếu bạn lưu và nhanh chóng đóng chương trình, bạn có thể nhận thấy nó không lưu kết quả, điều này là do nó tồn tại không đồng bộ. Bạn có thể không nhận thấy điều này mọi lúc, vì vậy nếu bạn có kế hoạch tiết kiệm trước khi thoát khỏi chương trình, bạn có thể muốn tính đến việc này bằng cách cho nó một chút thời gian để kết thúc.
Có lẽ ai đó có một số giải pháp tốt cho việc này mà họ có thể chia sẻ trong các ý kiến?