仅调用方法的一部分

时间:2012-11-21 10:45:53

标签: objective-c cocoa overloading

如果我有一个名为

的方法
-(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled {
    button.alpha = alpha;
    button.enabled = enabled;    
}

无论如何,我只能拨打[self changeButton:buttonName andAlpha:0.5];并且错过andEnabled(BOOL)已启用,以便保持相同的价值。

3 个答案:

答案 0 :(得分:2)

不,只有在声明其他方法时才会这样做。

喜欢

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha {
    [self changeButton:button andAlpha:alpha andEnabled:button.enabled]; 
}

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled {
    button.alpha = alpha;
    button.enabled = enabled;    
}

但请记住,这种方法并不总是好的。例如,某些自定义设置器可以备份已启用属性,即使您不想更改该值,也会调用该设置器。

答案 1 :(得分:0)

你不能这样做,你必须声明另一种方法。

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha;

答案 2 :(得分:0)

我相信你问的是c ++的默认参数化功能。

但Objective-C不支持这一点。

您可以创建两种方法:

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha {
    button.alpha = alpha; 
}

-(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled {
    button.alpha = alpha;
    button.enabled = enabled;    
}

对于C:使用ObjC没有为C子集添加任何特殊内容。任何无法在纯C中完成的事情都无法通过在ObjC中编译来完成。这意味着,您不能拥有默认参数,也不能重载函数。改为创建2个函数。

另一种方式(比特很长,有人会很少使用)是有一个标志并检查标志是否为。

 -(void) changeButton:(UIButton *)button andAlpha:(float)alpha andEnabled:(BOOL)enabled withFlag:(BOOL)flag{
    button.alpha = alpha;
    if(flag){        
        button.enabled = enabled;    
    }
}