我有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(),或抛出异常会更好。

在选择将取决于你如何看到使用这个类。如果这将是一个库的一部分,而你希望其他开发商频繁minimumNumberOfSidesmaximumNumberOfSides提供不正确的值,你应该抛出一个适当的异常。

一个字的警告,虽然。如果你期望的应用程序的用户经常提供不正确的值,那么一个异常是一个坏主意。在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;
}

修改:以下是 另一个SO问题进入大约在Objective-C的异常处理的细节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top