斷言幫助你在開發(fā)階段找到錯誤和不正確的假設(shè),先決條件幫助你在生產(chǎn)環(huán)境中探測到存在的問題睹限。
斷言和先決條件的不同點是,他們什么時候進行狀態(tài)檢測:斷言僅在調(diào)試環(huán)境運行,而先決條件則在調(diào)試環(huán)境和生產(chǎn)環(huán)境中運行怨规。在生產(chǎn)環(huán)境中,斷言的條件將不會進行評估锡足。
斷言:
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因為 age < 0波丰,所以斷言會觸發(fā)
或者
assert(age >= 0)
如果代碼已經(jīng)檢查了條件,你可以使用 assertionFailure(_:file:line:)函數(shù)來表明斷言失敗了.
if age > 10 {
print("You can ride the roller-coaster or the ferris wheel.")
} else if age > 0 {
print("You can ride the ferris wheel.")
} else {
assertionFailure("A person's age can't be less than zero.")
}
強制執(zhí)行先決條件:
當一個條件可能為false(假)舶得,但是繼續(xù)執(zhí)行代碼要求條件必須為true(真)的時候掰烟,需要使用先決條件。例如使用先決條件來檢查是否下標越界,或者來檢查是否將一個正確的參數(shù)傳給函數(shù)纫骑。
你可以使用全局 precondition(::file:line:) 函數(shù)來寫一個先決條件蝎亚。向這個函數(shù)傳入一個結(jié)果為 true 或者 false 的表達式以及一條信息,當表達式的結(jié)果為 false 的時候這條信息會被顯示:
// 在一個下標的實現(xiàn)里...
precondition(index > 0, "Index must be greater than zero.")