博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小知识三、USerDefault我换个姿势来实现
阅读量:6509 次
发布时间:2019-06-24

本文共 1516 字,大约阅读时间需要 5 分钟。

像往常一样,用字符串当key 缺点:

  • 容易拼写错误
  • 重复定义
  • 多人开发项目,难于管理

eg:

import Foundationimport UIKitprotocol UserDefaultNameSpace {}extension UserDefaultNameSpace {    static func namespace
(_ key:T) -> String where T: RawRepresentable { return "\(Self.self).\(key.rawValue)" }}protocol UserDefaultSettable: UserDefaultNameSpace { associatedtype UserDafaultKey: RawRepresentable}extension UserDefaultSettable where UserDafaultKey.RawValue == String {}extension UserDefaultSettable { /// 关于 Int 类型的存储和读取 static func set(value: Int, forKey key: UserDafaultKey) { let key = namespace(key) UserDefaults.standard.set(value, forKey: key) } static func integer(value: Int, forKey key: UserDafaultKey) { let key = namespace(key) UserDefaults.standard.integer(forKey: key) } /// 关于 String 类型存储和读取 static func set(value: Any?, forKey key: UserDafaultKey) { let key = namespace(key) UserDefaults.standard.set(value, forKey: key) } static func string(value: Any?, forKey key: UserDafaultKey) { let key = namespace(key) UserDefaults.standard.string(forKey: key) }}// MARK: - 使用方式extension UserDefaults { struct Account: UserDefaultSettable { enum UserDafaultKey: String { case name case age case birth } }}class test { func testFunction() { UserDefaults.Account.set(value: 20, forKey: .age) UserDefaults.Account.set(value: "hjq", forKey: .name) }}复制代码

转载地址:http://gebfo.baihongyu.com/

你可能感兴趣的文章
模块化Javascript代码的两种方式
查看>>
Money去哪了- 每日站立会议
查看>>
Python数据结构和算法学习笔记1
查看>>
正则之从dom字符串中提取url
查看>>
大数据——基础概念
查看>>
第六次上机实验
查看>>
机器学习温和指南
查看>>
解决Geoserver请求跨域的几种思路,第二种思路用过
查看>>
最短路-Bellman-Ford算法
查看>>
Object 类有哪些方法
查看>>
oracle 将一个表复制到另外一个表里 .
查看>>
libcurl以get方式请求服务器端文件
查看>>
复杂的数据类型3 - C++快速入门09
查看>>
OpenJudge 2786 Pell数列
查看>>
mysql 游标循环,嵌套游标循环
查看>>
css之自动换行
查看>>
swoft| 源码解读系列一: 好难! swoft demo 都跑不起来怎么破? docker 了解一下呗~
查看>>
win7 蛋疼的时间格式转化
查看>>
while死循环问题-输入字符就会死循环
查看>>
C++中二维数组的动态创建与处理
查看>>