2014-06-12 71 views
9

是否有可能編譯Swift中的編譯時斷言,如C++中的static_assert?也許某種方式來利用泛型的類型約束來強制編譯器中斷?在Swift中編譯時間斷言?

+0

我不知道它如何有用。 Swift已經可以使用'where'來限制類似 –

+1

的東西像#error? –

+0

我只提到將泛型約束爲潛在的實現方法,而不是我想要聲明的。在我的例子中,我定義了大量相關的編譯時間常量整數,我想在編譯時進行驗證。我通常會在C++中使用static_assert。 – Neil

回答

-5

如果你在談論一般的斷言,這裏的應用程序將崩潰,如果給定的條件,則只需使用:assert(condition,message)

例如:assert(2 == 3,"failing because 2 does not equal 3")

這是可能的斯威夫特。不過,我應該注意到,蘋果的設計理念是,應用程序永遠不會崩潰,而是應該以「複雜」的方式處理所有錯誤。

+0

您指的是正常的運行時斷言。我問的是編譯時斷言,像C++中的static_assert。這用於靜態可驗證的表達式,當它們失敗時會導致編譯器錯誤。 – Neil

+0

尼爾,對不起,我沒有真正遵循 - 我沒有使用static_assert。 Swift書中基礎部分的最後部分簡要地提到了斷言。我沒有看到任何關於編譯時間的問題,就像你問的那樣。我不知道他們是否支持他們。鏈接:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html –

0

這目前正在審查中Swift evolution,但目前不在語言中。

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分並提供鏈接供參考。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/19050719) – Maak