重写setter方法,并获得信息了
-
09-09-2019 - |
题
我有setter方法,我想使用合成后重写(setMinimumNumberOfSides)。在这里面,我把在约束的实例变量,以确保int是一定范围内。
后来在一个自定义的init方法,我设置的另一个实例变量(numberOfSides),但我需要确保minimumNumberOfSides和maximumNumberOfSides在范围内设置正确。我想在二传手的BOOL改变返回值,这样我就可以传回一个YES或NO,如果它成功/失败,但创造了一个矛盾的方法,我猜是因为我使用的是合成和重写制定者。
我怎样才能获得的信息出来容易检查,看看是否二传手被调用和返回成功?
-(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;
}
解决方案
您不必合成numberOfSides如果你在实现getter和setter规划。没有@synthesize numberOfSides
如果你选择,你可以返回一个BOOL。你需要相应申报的getter / setter在你的界面。
顺便说一句,另一种方法是使用合成的吸气/ setter和添加,其执行该检查单独的方法-(BOOL)isNumberOfSidesValid
。
其他提示
在这样的情况下,可以使用一个简单的呼叫到assert()
,或抛出异常会更好。
在选择将取决于你如何看到使用这个类。如果这将是一个库的一部分,而你希望其他开发商频繁minimumNumberOfSides
或maximumNumberOfSides
提供不正确的值,你应该抛出一个适当的异常。
一个字的警告,虽然。如果你期望的应用程序的用户经常提供不正确的值,那么一个异常是一个坏主意。在Objective-C的异常处理是昂贵的操作。如果这些检查到位为用户着想,你应该执行输入验证,并以更友好的方式报告错误给用户。
修改:以下是一些快速示例代码:
-(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;
}