如何在Swift中优雅地使用UIImage
jopen
9年前
作者:Natasha, 原文链接 ,原文日期:2015/08/30
</div>
</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)
这样的方式是不是很清晰呀,哈哈。首先,使用了漂亮的枚举值,关键是不再需要硬编码的字符串了。并且,枚举的值是自动填充出来的,不必担心拼写错误。其次,Image不再是可空的了,因为你可以确保它一定是存在的。
我自己建了个工程测试了一下,工程在 Github 可以下载,地址在 这里 。如果你想知道它如何在一个app中实现的,可以 check out 后看看。
Update
正如很多读者指出的,有很多开源的第三方库可以将Image名字导出成枚举类型。
可以 check out 以下的第三方库后查看:
同时,可以在下面添加任何的评论。