assert() 是 Swift 标准库中的一个断言函数,用于 在 Debug 模式下检测条件是否为 true,否则触发崩溃。
基本语法
assert(condition, message)
condition:要检查的布尔表达式,如果为 false,则触发断言。
message:(可选)自定义的错误消息,打印在控制台中,帮助定位问题。
assert() 的行为
1、仅在 Debug 模式下生效:
assert() 只在 Debug 模式下生效。
在 Release 模式下,assert() 会被自动忽略,不会影响应用运行。
2、触发崩溃:
如果 condition 为 false,assert() 会触发崩溃,并打印指定的 message 信息。
3、不影响 defer:
如果触发 assert() 崩溃,defer 语句仍然不会执行。
使用示例
let age = 15
assert(age >= 18, "年龄必须大于或等于 18 岁!")
Debug 模式时:
如果 age < 18,控制台输出:
Assertion failed: 年龄必须大于或等于 18 岁!
Release 模式时:
assert() 被忽略,程序不会触发崩溃。
无条件断言:
assertionFailure():无条件触发断言失败,用于不应该达到的代码路径。
func process(value: Int) {
if value < 0 {
assertionFailure("值不能小于 0!")
}
print("处理完成")
}
这种写法可以在 Debug 模式下提醒开发者不应到达某个逻辑分支。
注意事项
1、仅在 Debug 模式下有效:
assert() 不适合在生产环境中使用,因为在 Release 模式下,它会被忽略。
2、不要依赖 assert() 来确保业务逻辑安全:
由于 assert() 在 Release 模式下无效,因此不适用于关键业务逻辑的验证。
在 SwiftUI 中使用 assert()
在 SwiftUI 中,assert() 可用于检查界面状态是否符合预期:
import SwiftUI
struct ContentView: View {
var isUserLoggedIn = false
var body: some View {
VStack {
Button(action: {
assert(isUserLoggedIn, "用户未登录,无法进行操作!")
print("执行操作...")
}, label: {
Text("执行操作")
.padding()
.background(.blue)
.foregroundStyle(.white)
.cornerRadius(10)
})
}
}
}
什么时候使用 assert()?
推荐使用:
调试时验证不应发生的条件。
确保某些前提条件在 Debug 模式下得到验证。
在非关键路径上捕获潜在的逻辑错误。
避免使用:
在生产环境中使用 assert() 进行业务逻辑验证,建议使用 precondition() 或错误处理机制。
assertionFailure () 的用法
assertionFailure () 是 assert() 的一个特殊形式,会无条件触发崩溃。
func validate(value: Int) {
if value < 0 {
assertionFailure("值不应该为负数!")
}
}
validate(value: -5) // Debug 模式崩溃,Release 模式无影响
Debug 模式时,触发崩溃;Release 模式时,忽略此段逻辑。