有一些相關的問題,但我沒有足夠的網站聲譽評論現有的線程,迫使我開始一個新的。對於那個很抱歉。任何方式在Swift 3中做真正的條件編譯?
看來Swift沒有一個真正的預處理器。解決方法是使用#if/#else/#endif,但這裏的問題是它不會隱藏編譯器中的「錯誤」部分,強制'true'和'false'部分在語法上是有效的。鑑於Swift 3在語法上與Swift 2不兼容,這很困難 - 有沒有人找到一種解決方法,可以創建可以在任一環境下編譯的代碼? (如果XCode 8測試版允許使用Swift 2.2,或者如果XCode 7.3.1允許使用Swift 3,那麼這也會給我一個解決方法)。
我試圖做的,舉個簡單的例子,就是像
#if SWIFT3
let session = WCSession.default()
#else
let session = WCSession.defaultSession()
#end
我找不到任何方式做到這一點,似乎令人驚訝的是沒有一個如何完成Swift2語言完全不兼容的Swift3語法。
Swift 3的語法確實與Swift 2非常不同。所以,即使你有一個預處理器,試圖用'#filter'覆蓋它也不會起作用。預期的解決方案是將代碼庫轉換爲Swift 3(或將其分配給Swift 3)。試圖維護一個爲兩者編譯的不重要的代碼庫都是死路一條(就像Swift 1和Swift 2一樣)。 –
@RobNapier我完全同意這一點。這在道德上可能不太合理,但他們的確提供了有條件的編譯,而且確實有用。而且我可以想象轉換到Swift 3需要逐步進行的情況。 – matt
@matt看起來很有意思,但是從1到2我沒有在任何非平凡的代碼基礎上找到實用的東西。 2到3是一個更大的變化,因爲它重新命名了很多東西。很難想象它能夠在非常小的代碼之外工作。但時間會證明。 –