Swift 如何在userdefault中存储和检索数据?(例如:结构的数组)
如何将Swift 如何在userdefault中存储和检索数据?(例如:结构的数组),swift,userdefaults,Swift,Userdefaults,如何将类别Holarray存储为用户默认值 我试过了 存储用户默认值: struct ExpandableNames:Codable { var isExpanded: Bool var names: [String] var icons: [String] } var names = ["Food/Drink", "Tours", "Transport", "Gifts","Flights", "Shopping", "Activities","Entertainm
类别Holarray
存储为用户默认值
我试过了
存储用户默认值:
struct ExpandableNames:Codable {
var isExpanded: Bool
var names: [String]
var icons: [String]
}
var names = ["Food/Drink", "Tours", "Transport", "Gifts","Flights", "Shopping", "Activities","Entertainment","Accomodation","Other"]
var icons = ["Food_Category", "Tours", "Transport_Category", "Gifts_Category","Flights_Category","Shopping_Category","Activities_category","Entertainment_category", "Accomodation_Category","Other_Category"]
var categoryWholeArray = [Int:ExpandableNames]()
检索数据的问题就在这里
UserDefaults.standard.set(try? PropertyListEncoder().encode(categoryWholeArray), forKey:"categoryWholeArray")
如果let data=UserDefaults.standard.value(forKey:“categoryWholeArray”)为?资料{
let songs2=try?PropertyListDecoder().decode(Array.self,from:data)
}
有人试过吗?除了
if let data = UserDefaults.standard.value(forKey:"categoryWholeArray") as? Data {
let songs2 = try? PropertyListDecoder().decode(Array<categoryWholeArray.values>.self, from: data)
}
在
UserDefaults
中存储数据时,您需要编码
数据,当您试图获取这些数据时,必须解码
数据
这是我的分机
可能对你有帮助
if let data = UserDefaults.standard.value(forKey:"categoryWholeArray") as? Data {
let songs2 = try? PropertyListDecoder().decode([Int:ExpandableNames].self, from: data)
print(songs2)
}
扩展用户默认值{
func setCustomObjToUserDefaults(CustomeObj:AnyObject,forKey:String){
让defaults=UserDefaults.standard
让encodedData=NSKeyedArchiver.archivedData(withRootObject:CustomeObj)
defaults.set(encodedData,forKey:forKey)
defaults.synchronize()
}
func getCustomObjFromUserDefaults(forKey:String)->AnyObject{
让defaults=UserDefaults.standard
如果默认值为.object(forKey:forKey)!=nil{
如果let decoded=defaults.object(forKey:forKey)作为?数据{
让decodedTeams=NSKeyedUnarchiver.unarchiveObject(带:decoded)作为AnyObject
返回解码团队
}
}
归零
}
func setJsonObject(可编码:T,forKey:String){
如果let data=try?JSONEncoder().encode(可编码){
集合(数据,forKey:key)
}
}
func getJsonObject(uType:T.type,forKey:String)->T{
如果让数据=对象(forKey:key)作为数据,
让value=try?JSONDecoder().decode(类型,from:data){
返回值
}
归零
}
func removeCustomObject(forKey:String)
{
让defaults=UserDefaults.standard
defaults.removeObject(forKey:forKey)
defaults.synchronize()
}
}
如果您仍然需要帮助,请告诉我@ManikandanSsongs2
已声明,使用了songs2
。打字错误?不是我的否决票,而是用户默认值。它不是用来存储数据的。它只应用于存储首选项btw,而不应使用值(forKey:)
它是用于KVO的。UserDefaults有一个特定的方法来检索数据,称为data(forKey:)
extension UserDefaults {
func setCustomObjToUserDefaults(CustomeObj: AnyObject, forKey:String) {
let defaults = UserDefaults.standard
let encodedData = NSKeyedArchiver.archivedData(withRootObject: CustomeObj)
defaults.set(encodedData, forKey: forKey)
defaults.synchronize()
}
func getCustomObjFromUserDefaults(forKey:String) -> AnyObject? {
let defaults = UserDefaults.standard
if defaults.object(forKey: forKey) != nil {
if let decoded = defaults.object(forKey: forKey) as? Data {
let decodedTeams = NSKeyedUnarchiver.unarchiveObject(with:decoded) as AnyObject
return decodedTeams
}
}
return nil
}
func setJsonObject<T: Encodable>(encodable: T, forKey key: String) {
if let data = try? JSONEncoder().encode(encodable) {
set(data, forKey: key)
}
}
func getJsonObject<T: Decodable>(_ type: T.Type, forKey key: String) -> T? {
if let data = object(forKey: key) as? Data,
let value = try? JSONDecoder().decode(type, from: data) {
return value
}
return nil
}
func removeCustomObject(forKey:String)
{
let defaults = UserDefaults.standard
defaults.removeObject(forKey: forKey)
defaults.synchronize()
}
}