如何在Obj-C中定义具有多个可选参数的方法

时间:2013-10-24 15:26:52

标签: objective-c

我希望能够使用一个功能更新两组相同的按钮。此外,我不想更新所有按钮,只更新其中一些按钮。

我可以拥有这样的功能吗?:

-(void) updateFields{
                    updateButton1 : (Bool) x
                    updateButton2 : (Bool) y
                    updateButton3 : (Bool) z }

实现将如下所示:

[button1_1 setEnabled:x];
[button1_2 setEnabled:x]; //called only if updateButton1 is given an argument
[button2_1 setEnabled:y];
etc...

4 个答案:

答案 0 :(得分:0)

如何传递一个按钮数组和一个包含在NSNumber中的布尔数组?

- (void)updateButton:(NSArray *)buttons withArray:(NSArray *)enablers {

    // buttons is an array of UIButton
    // enablers is an array of NSNumber created from boolean value

    // Security check
    if(buttons.count != enabler.count) {
        NSLog(@"Error: array have different dimensions");
        return;
    }        

    // Enable buttons
    for(int i=0; i<buttons.count; i++) {
        UIButton *button = (UIButton *)[buttons objectAtIndex:i];
        BOOL enable = [[enablers objectAtIndex:i] boolValue]

        [button setEnabled:enable];
    }
}

答案 1 :(得分:0)

原始数据类型可能无法实现,除非您从它们创建对象并将它们放在NSArray或NSDictionary中。其他选项可以是创建自定义对象并将其作为参数传递。

- (void)selectButton:(SelectedButton *)iButton {
     if (iButton.type = A) {
     // Handle A
    } else if (iButton.type = B) {
     // Handle B
    } else if (iButton.type = C) {
     // Handle C
    }
}

答案 2 :(得分:0)

我认为你想要的语法作为C函数更有意义

但请注意,在此示例中,参数不是可选的。

void updateButtons(BOOL btn1, BOOL btn2, BOOL btn3){
    button1.enabled = btn1
    button2.enabled = btn2
    button3.enabled = btn3
}

答案 3 :(得分:0)

可以使用变量参数列表创建一个Objective-C方法,正如Matt Gallagher在Variable argument lists in Cocoa中所解释的那样。变量参数列表甚至在Foundation框架中使用,例如+[NSArray arrayWithObjects:...]

也就是说,将方法中的按钮列表作为数组传递可能要少得多,特别是考虑到现在可以使用对象文字轻松创建数组:

[foo updateFields:@[button1, button2, button3]];