Swift中圖片資源使用流程的優(yōu)化方法詳解
前言
去年發(fā)布的Xcode9支持在代碼編輯中直接插入圖片,類(lèi)似如下效果
但用了一段時(shí)間以后還是不太喜歡,換回了原來(lái)的方法。
本篇中許多實(shí)現(xiàn)細(xì)節(jié)已經(jīng)在 iOS中多語(yǔ)言本地化流程的優(yōu)化中寫(xiě)過(guò),沒(méi)再重復(fù),若有疑問(wèn)建議先閱讀該文章。
傳統(tǒng)的方法
// iOS let closeImage = UIImage(named: "close") // macOS let closeImage = NSImage(named: NSImage.Name("close"))
是不是看上去都感覺(jué)心累。
如何優(yōu)化
思路和 iOS中多語(yǔ)言本地化流程的優(yōu)化一樣,使用腳本將資源文件映射到靜態(tài)變量,即可直接調(diào)用:
Build Phases中新建一個(gè) Run Script,填入以下腳本:
# Assets.xcassets文件夾路徑 assetsFolder="${SRCROOT}/${PROJECT_NAME}/Assets.xcassets" # 生成的swift文件路徑(根據(jù)個(gè)人習(xí)慣修改) utilsFile="${SRCROOT}/${PROJECT_NAME}/Source/Utils/AssetsUtils.swift" touch $utilsFile # 兼容iOS和macOS的處理 echo -e "#if os(OSX)\n typealias Image = NSImage\n typealias ImageName = NSImage.Name\n#elseif os(iOS)\n import UIKit\n\n typealias Image = UIImage\n typealias ImageName = String\n#endif" > "${utilsFile}" # 使用extension來(lái)擴(kuò)展Image echo -e "\nextension Image {" >> "${utilsFile}" # 遍歷資源文件夾,將每個(gè)資源拼接成靜態(tài)變量輸出到swift文件中 for folder in `ls $assetsFolder` do if [[ $folder =~ ".imageset" ]] then asset=${folder/.imageset/} echo " static var assets_${asset}: Image? { return Image(named: ImageName(\"${asset}\")) }" >> "${utilsFile}" fi done # 完成輸出 echo "}" >> "${utilsFile}"
第一次運(yùn)行記得將AssetsUtils.swift加入到Xcode項(xiàng)目中
將 Run Script 放在 Compile Sources 的上面,這樣可以在編譯代碼前執(zhí)行,如果出現(xiàn)錯(cuò)誤也很容易定位。
腳本效果:
AssetsUtils.swift
#if os(OSX) typealias Image = NSImage typealias ImageName = NSImage.Name #elseif os(iOS) import UIKit typealias Image = UIImage typealias ImageName = String #endif extension Image { static var assets_close: Image? { return Image(named: ImageName("close")) } }
使用
// iOS let closeImage = Image.assets_close // macOS let closeImage = Image.assets_close
當(dāng)資源文件有修改時(shí) ⌘+B build一下就OK了。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例
希爾排序是對(duì)插入排序的一種改進(jìn)版本,算法本身并不穩(wěn)定,存在優(yōu)化空間,這里我們來(lái)講一下希爾排序的大體思路及Swift編程中實(shí)現(xiàn)希爾排序算法的代碼實(shí)例2016-07-07Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)
這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06如何利用SwiftUI實(shí)現(xiàn)可縮放的圖片預(yù)覽器
這篇文章主要給大家介紹了關(guān)于如何利用SwiftUI實(shí)現(xiàn)可縮放圖片預(yù)覽器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SwiftUI具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-09-09swift4.2實(shí)現(xiàn)新聞首頁(yè)導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了swift4.2實(shí)現(xiàn)新聞首頁(yè)導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法示例
Swift語(yǔ)言中沒(méi)有內(nèi)設(shè)的棧和隊(duì)列,很多擴(kuò)展庫(kù)中使用Generic Type來(lái)實(shí)現(xiàn)棧或是隊(duì)列。下面這篇文章就來(lái)給大家詳細(xì)介紹了Swift算法之棧和隊(duì)列的實(shí)現(xiàn)方法,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-03-03swift中defer的實(shí)際應(yīng)用小結(jié)
這篇文章主要給大家介紹了關(guān)于swift中defer的實(shí)際應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01swift中正確安全聲明一個(gè)單例的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于swift中如何正確安全聲明一個(gè)單例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12