我有一个setter方法(setMinimumNumberOfSides),我想在使用synthesize后覆盖它。在其中,我对实例变量进行约束以确保int在某些范围内。
稍后在自定义init方法中,我正在设置另一个实例变量(numberOfSides),但我需要确保在bounds中正确设置了minimumNumberOfSides和maximumNumberOfSides。我尝试将setter上的返回值更改为BOOL,因此如果成功/失败,我可以传回YES或NO,但是这会创建一个冲突的方法,我猜是因为我正在使用合成并覆盖setter。
如何轻松获取信息以检查是否已成功调用setter并返回?
-(void)setNumberOfSides:(int)sides
{
if ((sides < maximumNumberOfSides) && (sides > minimumNumberOfSides))
{
numberOfSides = sides;
}
else
NSLog (@"Invalid number of sides: %d is outside the constraints allowed", sides);
}
-(void)setMinimumNumberOfSides:(int)minimum
{
if (minimum > 2)
minimumNumberOfSides = minimum;
}
-(void)setMaximumNumberOfSides:(int)maximum
{
if (maximum <= 12)
maximumNumberOfSides = maximum;
}
-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max
{
if (self = [super init])
{
self.minimumNumberOfSides = min;
self.maximumNumberOfSides = max;
self.numberOfSides = sides;
}
return self;
}
答案 0 :(得分:7)
如果您计划实施getter和setter,则不必合成numberOfSides。如果您选择,如果没有@synthesize numberOfSides
,您可以返回BOOL。您需要相应地在接口中声明getter / setter。
-(BOOL)isNumberOfSidesValid
来执行此检查。
答案 1 :(得分:3)
在这种情况下,您最好使用对assert()
的简单调用或抛出异常。
选择取决于您如何看待使用此类。如果它将成为库的一部分,并且您希望其他开发人员经常为minimumNumberOfSides
或maximumNumberOfSides
提供不正确的值,那么您应该抛出适当的异常。
编辑:以下是一些快速示例代码:
-(void)setMinimumNumberOfSides:(int)minimum
{
if (minimum <= 2)
{
[NSException raise:@"invalid minimumNumberOfSides value"
format:@"value of %d is too low (must be > 2)", minimum];
}
minimumNumberOfSides = minimum;
}
编辑:以下是another SO question,详细介绍了Objective-C中的异常处理。