美文网首页swift学习
Swift泛型应用, UserDefault

Swift泛型应用, UserDefault

作者: 奥利奥_2aff | 来源:发表于2019-03-31 20:56 被阅读0次

开发中经常会用到UserDefault来存储零碎的数据, 用普通的写法比较低效.

let uid = UserDefaults.standard.value(forKey: "userdefault.key.uid") as? Int

可以利用Swift的extension来给Int类型添加便捷的函数:

extension Int {
    static func valueFromUserDefault(forKey key: String) -> Int? {
        return UserDefaults.standard.value(forKey: key) as? Int
    }
}

let uid = Int.valueFromUserDefault(forKey: "userdefault.key.uid")

而实际上, UserDefault存储的数据类型还有好几种, 而实现代码其实都是大同小异, 要每一个都这样添加函数就太麻烦了.
有一种更高效的方式给各种类型添加这个函数, 而且也方便统一修改. 就是用泛型和Protocol:

public protocol UserDefaultable {
    associatedtype E
    
    static func objectUserDefaults(forKey key: String) -> E?
}

extension UserDefaultable {
    public static func valueFromUserDefaults(forKey key: String) -> E? {
        return UserDefaults.standard.value(forKey: key) as? E
    }
}

这样只要声明了遵守UserDefaultable的类型都可以使用valueFromUserDefaults静态函数, 很自然, 这个associatedtype E就是绑定这个类型本身.

extension Bool: UserDefaultable {
    public typealias E = Bool
}

extension Int: UserDefaultable {
    public typealias E = Int
}

extension Int32: UserDefaultable {
    public typealias E = Int32
}

extension Int64: UserDefaultable {
    public typealias E = Int64
}

extension String: UserDefaultable {
    public typealias E = String
}

extension Double: UserDefaultable {
    public typealias E = Double
}

extension Data: UserDefaultable {
    public typealias E = Data
}

extension Array: UserDefaultable {
    public typealias E = Array
}

相关文章

  • Swift泛型应用, UserDefault

    开发中经常会用到UserDefault来存储零碎的数据, 用普通的写法比较低效. 可以利用Swift的extens...

  • iOS学习笔记47-Swift(七)泛型

    一、Swift泛型介绍 泛型是为Swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引...

  • Swift 中的泛型

    Swift泛型介绍 泛型是为Swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引入可...

  • swift泛型

    一、swift泛型介绍 泛型是为swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引...

  • Swift-泛型笔记

    Swift 泛型 Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出...

  • [ WWDC2018 ] - Swift 泛型 Swift Ge

    Swift 泛型历史 我们首先来回顾一下 Swift 中对于泛型支持的历史变更,看看现在在 Swift 中,泛型都...

  • Swift 运用协议泛型封装网络层

    Swift 运用协议泛型封装网络层 Swift 运用协议泛型封装网络层

  • 2021-12-01

    swift5基本语法-泛型函数和泛型类型 Swift中泛型可以将类型参数化,提高代码复用率,减少代码量。 一、泛型...

  • Swift 泛型简单应用

    泛型从字面来理解就是一种泛指的类型,通过在类、方法、接口等指定泛型的类型,可以避免重写,达到重用的目的,而且可以通...

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

网友评论

    本文标题:Swift泛型应用, UserDefault

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