在试图解决无法恢复的问题时,我正在尝试确定Swift暂停功能的用例。与precondition()
相比,fatalError()
何时应使用?
我已经阅读了documentation,看来使用precondition()
的唯一好处是在创建-unchecked
构建时进行了一些优化,但是在到达该代码而又不满足前提条件的情况下,文档指出这是一个严重的编程错误。哪种类型的编程错误将导致不满足前提条件而到达此代码?与fatalError()
可以更适当地处理的相比?与assert()
相比?
以下是我目前针对每种类型的用例:
assert()
var coreDataContainer: CoreDataContainer?
...
override func viewDidLoad() {
super.viewDidLoad()
assert(coreDataContainer != nil, "CoreDataContainer property not set")
...
}
前提条件()
var headerSize: CGSize?
...
override func prepare() {
super.prepare()
precondition(headerSize != nil, "Header size not set. Header size must be set by client before layout occurs.")
...
}
fatalError()
var fetchedResultsController: NSFetchedResultsController?
...
func numberOfSections(in tableView: UITableView) -> Int {
if let frc = self._fetchedResultsController {
return frc.sections!.count
}
return 0
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard let sections = self._fetchedResultsController?.sections else {
fatalError("NSFetchedResultsController sections are nil. Expected section number \(section).")
}
...
}
我希望用户不会接到这些电话。 这些示例中是否有一个不好的选择?