如何在Swift中优雅地使用UIImage

jopen 6年前

 作者:Natasha, 原文链接 ,原文日期:2015/08/30

译者:小铁匠Linus;校对: Prayer ;定稿: shanks

</div>

昨天,我抽空看了 Swift in Practice WWDC15 Session 的视频,很喜欢其中对Image命名的处理建议。

这个视频里解决的问题是方法UIImage:named:总需要传入硬编码(写死)的字符串参数,然后返回一个可空(optional)的UIImage。这就意味着可能会有两种出错的情况:一种是字符串的拼写错误;另一种是对可选的UIImage不正确解包。

一种可以解决这个字符串拼写错误的方式就是构建一个Image的常量文件,但是这不能解决出错的第二种情况。在 Swift 中,有个更好的解决方案。可以扩展UIImage,把所有的Image名字作为枚举类型,然后建立便利构造器来通过枚举构造对应的Image。看代码:

//  UIImage+Extension.swift  import UIKit    extension UIImage {      enum AssetIdentifier: String {          // Image Names of Minions          case Bob, Dave, Jorge, Jerry, Tim, Kevin, Mark, Phil, Stuart      }            convenience init!(assetIdentifier: AssetIdentifier) {          self.init(named: assetIdentifier.rawValue)      }  }

这样,就可以通过以下的方式在任何需要的地方构建Image:

let minionBobImage = UIImage(assetIdentifier: .Bob) 
</div>

这样的方式是不是很清晰呀,哈哈。首先,使用了漂亮的枚举值,关键是不再需要硬编码的字符串了。并且,枚举的值是自动填充出来的,不必担心拼写错误。其次,Image不再是可空的了,因为你可以确保它一定是存在的。

我自己建了个工程测试了一下,工程在 Github 可以下载,地址在 这里 。如果你想知道它如何在一个app中实现的,可以 check out 后看看。

Update

正如很多读者指出的,有很多开源的第三方库可以将Image名字导出成枚举类型。

可以 check out 以下的第三方库后查看:

同时,可以在下面添加任何的评论。