我是Objective-C的新手,并且试图弄清楚维护类的rep不变性的最佳方法是什么,因为异常并不是执行它们的适当方法。一个好的例子是Fraction
类,该类作为Kochan在Objective-C中的Programming的示例,具有以下setter方法:
-(void) setDenominator: (int) d {
self.denominator = d;
}
因此,请说您的代表不变式的一部分要求
self.denominator != 0
。例如,在Java中,强制执行不变式的最直接方法是,如果传递了0,则抛出IllegalArgumentException
,但这在Objective-C中没有意义。一种替代方法是添加一个NSError**
指针参数来报告问题,但这似乎既过分又不适合抽象的性质-与数据库连接不同,我们不希望出现这种情况。正常使用中出现零分母分数。那么,这里最干净的解决方案是什么?返回整数错误代码?我还缺少其他东西吗? 最佳答案
您可以使用 NSAssert()
:
- (void)setDenominator:(int)d
{
NSAssert(d != 0, @"denominator cannot be 0");
self.denominator = d;
}