因此,它们属于完全不同的概念世界。错误是针对可能实时出错的事情,我们需要从中连贯地恢复。断言是针对不应该出错的事情,并且我们对此感觉如此强烈以至于我们不希望程序在这种情况下发布到世界上,并且可以在不能使用错误的地方使用。
我自己的代码示例:
final class Board : NSObject, NSCoding, CALayerDelegate {
// ...
fileprivate var xct : Int { return self.grid.xct }
fileprivate var yct : Int { return self.grid.yct }
fileprivate var grid : Grid // can't live without a grid, but it is mutable
// ...
fileprivate lazy var pieceSize : CGSize = {
assert((self.xct > 0 && self.yct > 0), "Meaningless to ask for piece size with no grid dimensions.")
let pieceWidth : CGFloat = self.view.bounds.size.width / (CGFloat(self.xct) + OUTER + LEFTMARGIN + RIGHTMARGIN)
let pieceHeight : CGFloat = self.view.bounds.size.height / (CGFloat(self.yct) + OUTER + TOPMARGIN + BOTTOMMARGIN)
return CGSize(width: pieceWidth, height: pieceHeight)
}()
// ...
}
如果曾经pieceSize
以零网格维度调用,那么我的整个程序就有问题了。这不是测试运行时错误的问题。该程序本身基于错误的算法。这就是我想要检测的。