swift 自定義對象存UserDefaults

  1. 自定義對象需要遵守Codable協(xié)議
import Foundation

struct BookItem: Codable {
    var bookName: String
    var bookDescribe: String
    var bookPrice: Float
    
    //區(qū)別 可以將字典中`name`的值解析到`bookName`
    fileprivate enum CodingKeys: String, CodingKey {
        case bookName = "name"
        case bookDescribe
        case bookPrice
    }
}
  1. vc中調(diào)用
fileprivate func codableDemo() {
    
    //1. json字符串轉(zhuǎn)自定義對象
    let json = """
        {
            "name": "米飯童鞋",
            "bookPrice": 200.87,
            "bookDescribe": "A handsome boy."
        }
    """
    
    //2. string -> data
    guard let data = json.data(using: .utf8) else {
        return
    }
    
    //3. data -> item
    let decoder = JSONDecoder()
    guard let book = try? decoder.decode(BookItem.self, from: data) else {
        return
    }
    print(book, book.bookName, book.bookPrice, book.bookDescribe)
    
    //4. 自定義對象存 UserDefaults
    UserDefaults.standard.setItem(book, forKey: "book")
    guard let bk1 = UserDefaults.standard.getItem(BookItem.self, forKey: "book") else {
        return
    }
    print(bk1)
}
  1. UserDefaults擴(kuò)展
extension UserDefaults {
    
    func setItem<T: Encodable>(_ object: T, forKey key: String) {
        
        let encoder = JSONEncoder()
        guard let encoded = try? encoder.encode(object) else {
            return
        }
        
        self.set(encoded, forKey: key)
    }
    
    func getItem<T: Decodable>(_ type: T.Type, forKey key: String) -> T? {
        
        guard let data = self.data(forKey: key) else {
            return nil
        }
        
        let decoder = JSONDecoder()
        guard let object = try? decoder.decode(type, from: data) else {
            print("Couldnt find key")
            return nil
        }
        
        return object
    }
}
  1. 打印
BookItem(bookName: "米飯童鞋", bookDescribe: "A handsome boy.", bookPrice: 200.87) 米飯童鞋 200.87 A handsome boy.
BookItem(bookName: "米飯童鞋", bookDescribe: "A handsome boy.", bookPrice: 200.87)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容