我是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;
}

10-06 12:18