是否有可能編譯Swift中的編譯時斷言,如C++中的static_assert?也許某種方式來利用泛型的類型約束來強制編譯器中斷?在Swift中編譯時間斷言?
回答
如果你在談論一般的斷言,這裏的應用程序將崩潰,如果給定的條件,則只需使用:assert(condition,message)
例如:assert(2 == 3,"failing because 2 does not equal 3")
這是可能的斯威夫特。不過,我應該注意到,蘋果的設計理念是,應用程序永遠不會崩潰,而是應該以「複雜」的方式處理所有錯誤。
您指的是正常的運行時斷言。我問的是編譯時斷言,像C++中的static_assert。這用於靜態可驗證的表達式,當它們失敗時會導致編譯器錯誤。 – Neil
尼爾,對不起,我沒有真正遵循 - 我沒有使用static_assert。 Swift書中基礎部分的最後部分簡要地提到了斷言。我沒有看到任何關於編譯時間的問題,就像你問的那樣。我不知道他們是否支持他們。鏈接:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html –
這目前正在審查中Swift evolution,但目前不在語言中。
儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分並提供鏈接供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/19050719) – Maak
- 1. 無斷言編譯
- 2. GHC Haskell的編譯時斷言?
- 3. Swift中的斷言
- 4. GCC是否有內置的編譯時間斷言?
- 5. 斷言在交叉編譯代碼
- 6. 如何在Java中編譯時斷言某些東西?
- 7. 是否有可能在C++中使用編譯時斷言
- 8. Swift慢編譯時
- 9. 如何在沒有C++的情況下編譯時間斷言11
- 10. 語言間自動編譯
- 11. 更多的文件在Swift中增加編譯時間嗎?
- 12. 編譯時有/無斷言時的javap差異
- 13. expectLastCall的斷言時間
- 14. 編譯在線編譯時間錯誤?
- 15. C語言中:在編譯
- 16. 靜態斷言檢查編譯時間常數不傳遞給宏
- 17. 在assert someBoolean();之間禁用斷言的編譯Java是否有區別?和verifySomeBoolean();後者包含斷言?
- 18. 僅在Gradle項目中編譯時風暴JAR編譯時間
- 19. 方法編譯時斷言;仍然不能正常工作
- 20. 編譯器/語言運行時與中間件
- 21. 檢查常量陣列在編譯時期間(C語言)
- 22. 編譯io編程語言時出錯
- 23. 從rspec中斷言斷言與斷言
- 24. 在編譯期間編譯
- 25. 編譯時間polynoms
- 26. 斷言Android編程
- 27. 斷言IE編號
- 28. 在D中編譯時間碼生成
- 29. 通過編譯加快編譯時間
- 30. Xcode在Swift編譯錯誤
我不知道它如何有用。 Swift已經可以使用'where'來限制類似 –
的東西像#error? –
我只提到將泛型約束爲潛在的實現方法,而不是我想要聲明的。在我的例子中,我定義了大量相關的編譯時間常量整數,我想在編譯時進行驗證。我通常會在C++中使用static_assert。 – Neil