作者:Natasha, 原文链接 ,原文日期:2015/08/30
译者:小铁匠Linus;校对: Prayer ;定稿: shanks
昨天,我抽空看了 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 后看看。
正如很多读者指出的,有很多开源的第三方库可以将 Image
名字导出成枚举类型。
可以 check out 以下的第三方库后查看:
Shark
SwiftGen
同时,可以在下面添加任何的评论。