V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
banxi1988
V2EX  ›  iDev

[Swift] EasyDefaults: 以 Modern & Swifty 的方式读写 UserDefaults

  •  
  •   banxi1988 ·
    banxi1988 · 2016-12-31 17:46:43 +08:00 · 3247 次点击
    这是一个创建于 2916 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天发了介绍代码生成脚本的贴之后, 睡觉前感觉我可以提供一个更 Modern, Easy, Swifty 的方式的 帮助读写 UserDefaults. 今天抽空实现了. 首先来看看它是怎么使用的.

    struct MWebSettings{
    	static var baseFont = Default<String>("baseFont", defaultValue:"Menlo")
    	static var baseFontSize = Default<Int>("baseFontSize", defaultValue:15)
    	static var lineSpacing = Default<Int>("lineSpacing", defaultValue: 1)
    	static var avatarUrl = Default<URL>("avatar")
    	static var favoriteFruits = Default<[String]>("favoriteFruits")
    }
    
    // 写入值.
    MWebSettings.baseFontSize.value = 13
    // 读取值
    MWebSettings.baseFontSize.value // 13
    

    主要核心在一个包装的泛型 Default<T>, 虽然是泛型,但是提前做了支持的类型判断. 以提示你使用 UserDefaults 支持的数据类型.

    特色

    1. 泛型, 类型安全.
    2. 声明式, 声明 Defaults
    3. 可以直接提供默认值.
    4. 简单易用, 开箱即用.
    5. 拥有完善的测试代码, 文档

    代码在: https://github.com/banxi1988/EasyDefaults

    这个算是我第一个测试代码比较完善, 而且加了适当文档的开源项目了. 更重要的是, 实现得简单. 在这 2016 年最后一天, 当作是以比较完善的方式向 2016 告别.

    2 条回复    2017-01-02 13:38:50 +08:00
    danielwyo
        1
    danielwyo  
       2017-01-01 20:21:04 +08:00
    不错, 可以点个赞. 不过, 用 Default 作为类名似乎有点不妥, 虽然不是关键字, 但总归会容易跟小写的 default 混淆.
    banxi1988
        2
    banxi1988  
    OP
       2017-01-02 13:38:50 +08:00 via Android
    @danielwyo 这点我考虑过。但是没有想到更好的名字了。 按理说叫 UserDefault 应该可以。但补全时会跟它的复数类混淆。 其实很多 Cocoa 类都有用 default 作为变量名呢?在 Swift 3 中 甚至 直接用 default 关键词 作为变量名
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:04 · PVG 03:04 · LAX 11:04 · JFK 14:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.