美文网首页
Swift 将对象(对象属性包含enum)优雅的存入UserDe

Swift 将对象(对象属性包含enum)优雅的存入UserDe

作者: YourSummer | 来源:发表于2022-11-09 14:55 被阅读0次

Swift 对象数据存储方案常用方案为:

  • Coredata
  • RealmSwift
  • UserDefaults
开发中有这么一种心理: 存储的对象只有一个, 使用Coredata和RealmSwift有些纠结是不是大材小用了
这篇告诉你如何优雅的把对象存储在UserDefaults

核心思想:Codable 协议

  1. 首先看模型构建, 如果要存枚举, 那么枚举也需要遵循 Codable协议
// 遵循 ```Codable```协议结构体
struct TestCodableModel: Codable {
    var name = ""
    var type = TestType.normal
}
// 遵循 ```Codable```协议 的枚举
enum TestType: String, Codable {
    case normal = "normal"
    case firstType = "firstType"
}
  1. 优雅的写一个UserDefaults存储类
class CPUserDefaults {
    static let sheard = CPUserDefaults()
    
    // 测试模型数据
    var testData: Data {
        get {
            return UserDefaults.standard.data(forKey: "testData") ?? Data()
        }
        set {
            UserDefaults.standard.setValue(newValue, forKey: "testData")
            UserDefaults.standard.synchronize()
        }
    }
    
    // 测试数据模型
    var testModel: TestCodableModel? {
        get {
            do {
                // chargeModel get方法中调用 testData的get方法, 转模型返回
                return try JSONDecoder().decode(TestCodableModel.self, from: testData)
            } catch {
                return nil
            }
        }
        set {
            do {
                // chargeModel set方法中把chargeModel实例转成testData, 再调用testData的set方法存入UserDefaults
                testData = try JSONEncoder().encode(newValue)
            } catch {
                print("存储失败")
            }
        }
    }
}
// 实例化一个模型
let model = TestCodableModel(name: "测试", type: .firstType)
CPUserDefaults.sheard.testModel = model
let model = CPUserDefaults.sheard.testModel
print("model = \(model)")
输出: model = Optional(TestCoredata.TestCodableModel(name: "测试", type: TestCoredata.TestType.firstType))
  1. 当然可以将项目中的所有要存在UserDefaults中的值整理到 这个管理类
    var一个属性的事情
var token: String {
    get {
        return UserDefaults.standard.string(forKey: "token") ?? ""
    }
    set {
        UserDefaults.standard.setValue(newValue, forKey: "token")
        UserDefaults.standard.synchronize()
    }
}

var isLogin: Bool {
    get {
        return UserDefaults.standard.bool(forKey: "isLogin")
    }
    set {
        UserDefaults.standard.setValue(newValue, forKey: "isLogin")
        UserDefaults.standard.synchronize()
    }
}

温馨提示啊: OC也可以充分运用属性的setget方法把UserDefaults整理在一个类中

相关文章

  • Swift 将对象(对象属性包含enum)优雅的存入UserDe

    Swift 对象数据存储方案常用方案为: Coredata RealmSwift UserDefaults 开发中...

  • Python基础语法(八)面向对象

    类定义 类中包含属性和方法,类通过class来定义 不用定义属性,属性在每个对象中是独立的 对象包含对象 隐藏对象...

  • JavaScript对象属性

    JavaScript对象属性 简单理解对象 运行环境 node V10.16.3 对象属性 数据属性数据属性包含...

  • Swift学习-进阶02

    swift对象本质,一个swift的对象默认占用16字节大小,在内存中的结构: swift类结构: 属性 存储属性...

  • Js 对象、原型、继承

    一、对象 ECMA-262把对象定义为:”无序属性的集合,其属性可以包含基本值、对象或者函数“;每个对象的属性或者...

  • JS高程学习-第六章(一)---认识对象

    认识对象 什么是对象 无序属性的集合,其属性可以包含基本值、对象或者函数 哈希表 1. 属性类型 对象在创建时...

  • 第6章、面向对象的程序设计

    对象定义:无序属性的集合,其属性可以包含基本值、对象或函数。 6.1 理解对象 6.1.1 属性类型 ECMA-2...

  • Javascript 权威指南笔记

    1. javascript中有对象概念 包含属性和属性值 2. 对象+函数=方法 a.reverse() a对象调...

  • 面向对象-001

    title: 面向对象编程01 对象:无序属性的集合,其属性可以包含基本值,对象,或者函数。 理解对象 创建自定义...

  • (8) 对象

    对象 1. 概念 ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象或者函数。” 对象 =...

网友评论

      本文标题:Swift 将对象(对象属性包含enum)优雅的存入UserDe

      本文链接:https://www.haomeiwen.com/subject/slxatdtx.html