专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
归档HMUserAccount
- iOS存储数据的方式
- 直接写到本地(Plist)
- NSUserDefaults
- 归档和解档(对象)
- Sqlite(数据库)
- CoreData
归档和解档
实现
NSCoding
协议class HMUserAccount: NSObject, NSCoding
实现协议方法
// MARK: - 归档和解档 /// 归档 func encode(with aCoder: NSCoder) { aCoder.encode(access_token, forKey: "access_token") aCoder.encode(uid, forKey: "uid") aCoder.encode(expires_in, forKey: "expires_in") aCoder.encode(expiresDate, forKey: "expiresDate") }
/// 解档 required init?(coder aDecoder: NSCoder) { access_token = aDecoder.decodeObject(forKey: "access_token") as? String uid = aDecoder.decodeObject(forKey: "uid") as? String expires_in = aDecoder.decodeDouble(forKey: "expires_in") expiresDate = aDecoder.decodeObject(forKey: "expiresDate") as? Date }
在
HMUserAccountViewModel
定义归档路径/// 归档路径 var accountPath = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.plist")
在
HMUserAccountViewModel
归档
CZUserAccount
保存账户信息/// 保存账户信息 private func saveUserAccount() { if userAccount != nil { NSKeyedArchiver.archiveRootObject(userAccount!, toFile: accountPath) } }
// MARK: - 加载Access Token func loadAccessToken(code: String) { ... HMNetworkTool.shared.request(method: HMNetworkMethod.POST, URLString: urlString, parameters: parameters, progress: nil, success: { (_, result) in print("result = \(result)") let dict = result as! [String: Any] // 字典转模型 self.userAccount = HMUserAccount(dict: dict) print("userAccount = \(self.userAccount)") // 保存账户信息 self.saveUserAccount() }) { (_, error) in print("error: \(error)") } }