作者:Natasha,原文鏈接,原文日期:2015/08/30
譯者:小鐵匠Linus;校對:Prayer;定稿:shanks
昨天,我抽空看了Swift in Practice WWDC15 Session的視頻,很喜歡其中對 Image
命名的處理建議。
這個(gè)視頻里解決的問題是方法UIImage:named:
總需要傳入硬編碼(hard-coded)的字符串參數(shù),然后返回一個(gè)可空(optional)的UIImage
。這就意味著可能會有兩種出錯(cuò)的情況:一種是字符串的拼寫錯(cuò)誤;另一種是對可選的UIImage
不正確解包。
一種可以解決這個(gè)字符串拼寫錯(cuò)誤的方式就是構(gòu)建一個(gè)Image
的常量文件,但是這不能解決出錯(cuò)的第二種情況。在 Swift 中,有個(gè)更好的解決方案。可以擴(kuò)展UIImage
,把所有的Image
名字作為枚舉類型,然后建立便利構(gòu)造器來通過枚舉構(gòu)造對應(yīng)的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)
}
}
這樣,就可以通過以下的方式在任何需要的地方構(gòu)建Image
:
let minionBobImage = UIImage(assetIdentifier: .Bob)
這樣的方式是不是很清晰呀,哈哈。首先,使用了漂亮的枚舉值,關(guān)鍵是不再需要硬編碼的字符串了。并且,枚舉的值是自動補(bǔ)全的,不必?fù)?dān)心拼寫錯(cuò)誤。其次,Image
不再是可空的了,因?yàn)槟憧梢源_保它一定是存在的。
這個(gè)視頻給我最大的啟發(fā)是:充分利用編譯器。使用枚舉值作為圖片的名字就可以讓編譯器來實(shí)現(xiàn)自動補(bǔ)全并檢查圖片是否存在。
我自己建了個(gè)工程測試了一下,工程在 Github 可以下載,地址在這里。如果你想知道它如何在一個(gè)app中實(shí)現(xiàn)的,可以 check out 后看看。
更新
正如很多讀者指出的,有很多開源的第三方庫可以將Image
名字導(dǎo)出成枚舉類型。
可以查看下面的第三方庫:
歡迎各種評論。