在Swift中,ENABLE_NS_ASSERTIONS被忽略,断言是打开还是关闭取决于SWIFT_OPTIMIZATION_LEVEL,请参阅此处以获取更多信息.
assert() 积极参与 -OnoneassertionFailure() 积极参与
-Ononeprecondition()是活跃的-Onone和-OpreconditionFailure()是活跃的-Onone,-O和-OuncheckedfatalError()是活跃的-Onone,-O和-Ounchecked调试和Beta 版本应该启用断言,版本构建应该禁用断言.
我可以通过该precondition方法在Swift中编写所有断言,并使用-Ounchecked标志编译Release版本,使用标志构建beta版本-O.
iOS版本中的默认版本是-O.有没有建议不要使用-Ounchecked发布版本?这可能导致哪些其他不良副作用?
绝对不应该-Ounchecked为发布而编译,以便precondition仅在测试时使用.编译-Ounchecked还会禁用对数组越界和解包等内容的检查nil,这可能会导致一些涉及内存损坏的非常讨厌的生产错误.
您可以通过以下-assert-config参数独立于编译器优化设置来控制断言行为swiftc:
$ cat assert.swift
assert(false, "assertion asserted")
println("made it here...")
$ swiftc -Onone assert.swift; ./assert
assertion failed: assertion asserted: file assert.swift, line 1
Illegal instruction: 4
$ swiftc -O assert.swift; ./assert
made it here...
$ swiftc -O -assert-config Debug assert.swift; ./assert
assertion failed: assertion asserted: file assert.swift, line 1
Illegal instruction: 4
$
Run Code Online (Sandbox Code Playgroud)
它看起来不像是有一个Xcode Build Settings切换,但您可以使用"Other Swift Flags"设置添加.
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |