作者:Natasha,原文链接,原文日期:2015/08/30
译者:小铁匠Linus;校对:Prayer;定稿:shanks
昨天,我抽空看了Swift in Practice WWDC15 Session的视频,很喜欢其中对 Image
命名的处理建议。
这个视频里解决的问题是方法UIImage:named:
总需要传入硬编码(hard-coded)的字符串参数,然后返回一个可空(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 后看看。
更新
正如很多读者指出的,有很多开源的第三方库可以将Image
名字导出成枚举类型。
可以查看下面的第三方库:
欢迎各种评论。