zoukankan      html  css  js  c++  java
  • extension 的一个应用

    枚举和 extension 都是 swift 中非常好用的特性。这里我们就来讨论一个应用的例子,供大家参考。

    我们在开发 app 的时候,都会用到各种图片资源,而我们读取图片资源时主要是通过UIImage 来操作的。比如这样:

    var icon = UIImage(named: "mushroom")
    

    我们通过传入图片资源的名称来构造 UIImage,这个方法大家应该都很熟悉了。这样读取图片是挺方便的。但也有它的一些弊端。

    比如我们每次读取图片,都需要手工的输入图片名。这样手动输入名称,就有几个弊端,首先我们很容易输入错误的名称,造成图片读取失败。在稍微复杂的工程中,这样就有可能会产生那些很难调试的bug。再有,这种随意输入的方式,会让我们项目中的资源文件缺乏结构性。

    我们这里就可以用一个枚举来表示图片资源的名称,

    enum AssetIdentifier : String {
    
            case Flower = "ic_flower"
            case Mushroom = "ic_mushroom"
            case Mario = "ic_mario"
    
        }
    

    然后在我们构造 UIImage 的时候,我们将枚举的 rawValue 传递给构造方法:

    var image = UIImage(named: AssetIdentifier.Mario.rawValue)
    

    这样,就解决了硬编码图片名称的缺乏结构性的问题。但这样做还是有一些问题,比如每次都要写一个 rawValue 的这种写法比较奇怪。另外,
    虽然我们用到了枚举,到我们实际传递的仍然是字符串。

    关于枚举rawValue 的相关内容,请参看这篇关于枚举的介绍

    那么接下来,我们还可以更进一步,我们定义 UIImageextension 让它可以直接通过枚举来进行初始化:

    extension UIImage {
    
        enum AssetIdentifier : String {
    
            case Flower = "ic_flower"
            case Mushroom = "ic_mushroom"
            case Mario = "ic_mario"
    
        }
    
        convenience init!(assetIdentifier : AssetIdentifier) {
    
            self.init(named: assetIdentifier.rawValue)
    
        }
    
    }
    

    我们定义了 UIImageextension 并重载了它的初始化方法,使用 AssetIdentifier 作为参数来标示图片资源。接下来我们就可以直接使用枚举来初始化图片资源了:

    let mushroom = UIImage(assetIdentifier: .Mushroom)
    

    相比之前直接用手写字符串的方式,代码的可读性和整体图片资源的结构性有了明显的提升。当然,我们这里的模式也有它自己有待完善的地方。比如每次我们新增一个图片资源,都要手工的在枚举中设置相应的枚举项,并指定对应关系。

    这里给大家起到一个抛砖引玉的作用,相信各位的聪明才智能够继续发现更好的方法。

    Gist: https://gist.github.com/swiftcafex/4c76e09c6eca588f9976

    更多精彩内容,请扫码关注微信公众号

  • 相关阅读:
    element-ui 中Message 消息提示
    MYSQL 常用语法格式
    python 爬取必应每日图片
    linux:文件权限管理
    如何建立自我学习的"触发机制"?
    总有那么一些人,把自己的思想强加给别人
    linux 控制history命令历史记录
    linux apt-get 安装与卸载命令
    ubuntu16.04下 安装java8
    历史与过去是一面镜子,它照到的是你现在的自己
  • 原文地址:https://www.cnblogs.com/theswiftworld/p/4609690.html
Copyright © 2011-2022 走看看