首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在userdefault中存储和检索数据?(例如:结构数组)

如何在userdefault中存储和检索数据?(例如:结构数组)
EN

Stack Overflow用户
提问于 2019-05-21 20:10:05
回答 2查看 284关注 0票数 1
代码语言:javascript
复制
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]()

如何将categoryWholeArray存储到用户默认位置?

我试过了

商店userDefault:

代码语言:javascript
复制
 UserDefaults.standard.set(try? PropertyListEncoder().encode(categoryWholeArray), forKey:"categoryWholeArray")

检索数据的问题在这里

代码语言:javascript
复制
   if let data = UserDefaults.standard.value(forKey:"categoryWholeArray") as? Data {
                      let songs2 = try? PropertyListDecoder().decode(Array<categoryWholeArray.values>.self, from: data)
}

有人试过了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-21 20:12:20

全部正确,除了

代码语言:javascript
复制
if let data = UserDefaults.standard.value(forKey:"categoryWholeArray") as? Data {
    let songs2 = try? PropertyListDecoder().decode([Int:ExpandableNames].self, from: data)
    print(songs2)
}
票数 -4
EN

Stack Overflow用户

发布于 2019-05-21 20:22:10

UserDefaults中存储数据时,您需要encode数据,当您尝试获取这些数据时,您必须对其执行decode操作。

这是我的extension,可能会对你有所帮助。

代码语言:javascript
复制
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()
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56238000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档