Swift 5+
ไม่มีคำตอบใดที่ครอบคลุมรายละเอียดเกี่ยวกับความสามารถในการจัดเก็บในตัวเครื่อง มันสามารถทำได้มากกว่าแค่สายอักขระ
คุณมีตัวเลือกต่อไปนี้โดยตรงจากเอกสารของ Apple สำหรับการ 'รับ' ข้อมูลจากค่าเริ่มต้น
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.
นี่คือตัวเลือกสำหรับ 'การตั้งค่า'
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.
หากมีการจัดเก็บสิ่งต่าง ๆ เช่นการตั้งค่าและไม่ใช่ชุดข้อมูลขนาดใหญ่สิ่งเหล่านี้เป็นตัวเลือกที่สมบูรณ์แบบ
ตัวอย่างคู่ :
การตั้งค่า:
let defaults = UserDefaults.standard
var someDouble:Double = 0.5
defaults.set(someDouble, forKey: "someDouble")
การเดินทาง:
let defaults = UserDefaults.standard
var someDouble:Double = 0.0
someDouble = defaults.double(forKey: "someDouble")
สิ่งที่น่าสนใจเกี่ยวกับหนึ่งใน getters คือdictionaryRepresentation , getter ที่มีประโยชน์นี้จะนำข้อมูลทุกชนิดของคุณไปใช้โดยไม่คำนึงว่ามันคืออะไรและใส่ไว้ในพจนานุกรมที่ดีที่คุณสามารถเข้าถึงได้โดยชื่อสตริงและให้ประเภทข้อมูลที่ถูกต้อง มันกลับมาเนื่องจากเป็นประเภท'ใด ๆ'
คุณสามารถจัดเก็บคลาสและวัตถุของคุณเองโดยใช้func set(Any?, forKey: String)
และfunc object(forKey: String) -> Any?
setter และทะเยอทะยานตามลำดับ
หวังว่านี่จะช่วยเพิ่มประสิทธิภาพของคลาส UserDefaults ให้มากขึ้นสำหรับการจัดเก็บข้อมูลในเครื่อง
เมื่อทราบเท่าไหร่ที่คุณควรเก็บและความถี่ที่Hardy_Germanyให้คำตอบที่ดีในการที่เกี่ยวกับเรื่องนี้โพสต์ที่นี่เป็นคำพูดจากมัน
ดังที่ได้กล่าวไปแล้ว: ฉันไม่ได้ตระหนักถึงข้อ จำกัด ขนาดใด ๆ (ยกเว้นหน่วยความจำกายภาพ) เพื่อจัดเก็บข้อมูลใน. plist (เช่น UserDefaults) ดังนั้นจึงไม่ใช่คำถามของวิธีการมาก
คำถามที่แท้จริงควรจะเป็นอย่างไรคุณเขียนใหม่ / เปลี่ยนค่า ... และนี่คือที่เกี่ยวข้องกับแบตเตอรี่หมดการเขียนนี้จะทำให้
IOS ไม่มีโอกาสที่จะหลีกเลี่ยงการเขียนทางกายภาพไปยัง "ดิสก์" หากค่าเดียวมีการเปลี่ยนแปลงเพียงเพื่อรักษาความสมบูรณ์ของข้อมูล เกี่ยวกับ UserDefaults ทำให้ไฟล์ทั้งหมดถูกเขียนใหม่ในดิสก์
สิ่งนี้จะเพิ่มพลังให้กับ "ดิสก์" และทำให้มันใช้พลังงานได้นานขึ้นและป้องกันไม่ให้ IOS ไปสู่สถานะพลังงานต่ำ
อย่างอื่นที่จะต้องทราบดังกล่าวโดยใช้โมฮัมหมัดเรซา Farahani จากนี้โพสต์เป็นตรงกันและซิงโครธรรมชาติของ userDefaults
เมื่อคุณตั้งค่าเริ่มต้นจะมีการเปลี่ยนแปลงพร้อมกันภายในกระบวนการของคุณและแบบอะซิงโครนัสกับที่เก็บข้อมูลถาวรและกระบวนการอื่น ๆ
ตัวอย่างเช่นถ้าคุณบันทึกและปิดโปรแกรมอย่างรวดเร็วคุณอาจสังเกตเห็นว่าไม่ได้บันทึกผลลัพธ์นี่เป็นเพราะโปรแกรมยังคงทำงานแบบอะซิงโครนัส คุณอาจไม่ได้สังเกตเรื่องนี้ตลอดเวลาดังนั้นหากคุณวางแผนที่จะบันทึกก่อนที่จะออกจากโปรแกรมคุณอาจต้องการบัญชีสำหรับสิ่งนี้โดยให้เวลาพอที่จะเสร็จสิ้น
บางทีใครบางคนอาจมีทางออกที่ดีสำหรับสิ่งนี้ที่พวกเขาสามารถแบ่งปันในความคิดเห็นได้?