如何在 Swift 中優(yōu)雅地使用 UIImage

作者: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)出成枚舉類型。
可以查看下面的第三方庫:

歡迎各種評論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容