前言
去年發布的Xcode9支持在代碼編輯中直接插入圖片,類似如下效果
但用了一段時間以后還是不太喜歡,換回了原來的方法。
本篇中許多實現細節已經在 iOS中多語言本地化流程的優化中寫過,沒再重復,若有疑問建議先閱讀該文章。
傳統的方法
// iOSlet closeImage = UIImage(named: "close")// macOSlet closeImage = NSImage(named: NSImage.Name("close"))
是不是看上去都感覺心累。
如何優化
思路和 iOS中多語言本地化流程的優化一樣,使用腳本將資源文件映射到靜態變量,即可直接調用:
Build Phases中新建一個 Run Script,填入以下腳本:
# Assets.xcassets文件夾路徑assetsFolder="${SRCROOT}/${PROJECT_NAME}/Assets.xcassets"# 生成的swift/299295.html">swift/274757.html">swift文件路徑(根據個人習慣修改)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來擴展Imageecho -e "/nextension Image {" >> "${utilsFile}"# 遍歷資源文件夾,將每個資源拼接成靜態變量輸出到swift文件中for folder in `ls $assetsFolder`doif [[ $folder =~ ".imageset" ]]then asset=${folder/.imageset/} echo " static var assets_${asset}: Image? { return Image(named: ImageName(/"${asset}/")) }" >> "${utilsFile}"fidone# 完成輸出echo "}" >> "${utilsFile}"
第一次運行記得將AssetsUtils.swift加入到Xcode項目中
將 Run Script 放在 Compile Sources 的上面,這樣可以在編譯代碼前執行,如果出現錯誤也很容易定位。
腳本效果:
AssetsUtils.swift
#if os(OSX) typealias Image = NSImage typealias ImageName = NSImage.Name#elseif os(iOS) import UIKit typealias Image = UIImage typealias ImageName = String#endifextension Image { static var assets_close: Image? { return Image(named: ImageName("close")) }}
使用
// iOSlet closeImage = Image.assets_close// macOSlet closeImage = Image.assets_close
當資源文件有修改時 ?+B build一下就OK了。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。
|
新聞熱點
疑難解答