Swift中圖片資源使用流程的優(yōu)化方法詳解
前言
去年發(fā)布的Xcode9支持在代碼編輯中直接插入圖片,類似如下效果
但用了一段時間以后還是不太喜歡,換回了原來的方法。
本篇中許多實現(xiàn)細(xì)節(jié)已經(jīng)在 iOS中多語言本地化流程的優(yōu)化中寫過,沒再重復(fù),若有疑問建議先閱讀該文章。
傳統(tǒng)的方法
// iOS let closeImage = UIImage(named: "close") // macOS let closeImage = NSImage(named: NSImage.Name("close"))
是不是看上去都感覺心累。
如何優(yōu)化
思路和 iOS中多語言本地化流程的優(yōu)化一樣,使用腳本將資源文件映射到靜態(tài)變量,即可直接調(diào)用:
Build Phases中新建一個 Run Script,填入以下腳本:
# Assets.xcassets文件夾路徑 assetsFolder="${SRCROOT}/${PROJECT_NAME}/Assets.xcassets" # 生成的swift文件路徑(根據(jù)個人習(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來擴展Image echo -e "\nextension Image {" >> "${utilsFile}" # 遍歷資源文件夾,將每個資源拼接成靜態(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}"
第一次運行記得將AssetsUtils.swift加入到Xcode項目中
將 Run Script 放在 Compile Sources 的上面,這樣可以在編譯代碼前執(zhí)行,如果出現(xiàn)錯誤也很容易定位。
腳本效果:
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)資源文件有修改時 ⌘+B build一下就OK了。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Swift之for循環(huán)的基礎(chǔ)使用學(xué)習(xí)
這篇文章主要為大家介紹了Swift之for循環(huán)的基礎(chǔ)學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06如何利用SwiftUI實現(xiàn)可縮放的圖片預(yù)覽器
這篇文章主要給大家介紹了關(guān)于如何利用SwiftUI實現(xiàn)可縮放圖片預(yù)覽器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用SwiftUI具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-09-09