在基于 Swift 的專案中,我需要根據前處理器規則設定變數的值,如下例所示。
var doSomething = false
#if targetEnvironment(macCatalyst)
doSomething = true
#endif
if doSomething {
print("Execute!")
}
如果我為 iOS 模擬器構建代碼,Xcode 將在該行生成“將永遠不會被執行”警告print("Execute!")。這是有道理的,因為前處理器規則是在編譯之前評估的,因此當目標是 iOS 模擬器時,上面的代碼對應于:
var doSomething = false
if doSomething {
print("Execute!")
}
我只是想知道是否有任何處理此類案件的建議。理想情況下,我想避免對每個陳述句使用前處理器條件,如下所示:
#if targetEnvironment(macCatalyst)
print("Execute!")
#endif
但依賴像原始示例一樣的變數。我還希望避免在 Xcode 中完全禁用所有源代碼的“將永遠不會被執行”警告的顯示。
有沒有辦法設定“doSomething”變數,以便 Xcode 在這種情況下不顯示警告?
謝謝
更新:
感謝 Swinny89 建議使用惰性變數。效果很好!您可以在下面找到最終代碼:
lazy var doSomething: Bool = {
#if targetEnvironment(macCatalyst)
return true
#else
return false
#endif
}()
if doSomething {
print("Execute!")
}
uj5u.com熱心網友回復:
為了可讀性和易用性,我將使用由函式設定的惰性 var。這意味著我們不會浪費兩次重新定義相同的東西,并且這個函式只會在設定你的值時運行一次:
///Var is true if running on macCatalyst, otherwise false
lazy var doSomething = {
#if targetEnvironment(macCatalyst)
return true
#else
return false
#endif
}()
if doSomething {
print("Execute!")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449102.html
上一篇:如何快速使撥動開關始終打開?
