objective-c - Objective-C 2.0 中的可选参数?

标签 objective-c

在 Objective-C 2.0 中,是否可以创建一个参数是可选的方法?也就是说,你可以有这样的方法调用:

[aFraction print];

还有这个:

[aFraction print: someParameter];

在同一个程序中。

Apple 的 Objective-C 2.0 编程语言 指南将 Obj-C 与 Python 进行了对比,似乎说这是不允许的。我还在学习,我想确定一下。如果它可能的,那么语法是什么,因为我的第二个代码示例不起作用。

更新: 好的,我刚刚做了两个方法,都叫“print”。

标题

-(void) print;
-(void) print: (BOOL) someSetting; 

实现

-(void) print {
    [self print:0];
}

-(void) print: (BOOL) someSetting {
    BOOL sv;
    sv = someSetting;

    if ( sv ) {
        NSLog(@"cool stuff turned on");
    }
    else {
        NSLog(@"cool stuff turned off");
    }
}

相关的程序行

    ...
    printParamFlag = TRUE;

// no parameter
    [aCodeHolder print];

// single parameter
    [aCodeHolder print:printParamFlag];
    ...

我不敢相信这有效。有什么理由我不应该这样做吗?

最佳答案

你可以声明多个方法:

- (void)print;
- (void)printWithParameter:(id)parameter;
- (void)printWithParameter:(id)parameter andColor:(NSColor *)color;

在实现中你可以这样做:

- (void)print {
    [self printWithParameter:nil];
}

- (void)printWithParameter:(id)parameter {
    [self printWithParameter:nil andColor:[NSColor blackColor]];
}

编辑:

请不要同时使用 printprint:。首先,它没有指出参数是什么,其次没有人(ab)以这种方式使用Objective-C。大多数框架都有非常清晰的方法名称,这是使 Objective-C 编程如此轻松的一件事。普通的开发者是不会想到这种方法的。

还有更好的名字,例如:

- (void)printUsingBold:(BOOL)bold;
- (void)printHavingAllThatCoolStuffTurnedOn:(BOOL)coolStuff;

关于objective-c - Objective-C 2.0 中的可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561185/

相关文章:

ios - 如何子类化NSMutableData

objective-c - 强制 iOS 应用以横向模式启动

ios - 如何制作这个 "tape rolling"效果 - Objective C

objective-c - 将NSDictionary复制到NSArray

ios - ios 8.3 显示 alertview 时键盘会自动出现

ios - drawViewHierarchyInRect :afterScreenUpdates: delays other animations

iphone - 泄漏已发布的NSString

ios - 如何使用自动布局将微调器居中?

ios - 使用 CMMotionManager 使图像环绕屏幕边缘?

objective-c - 什么是 nil,但插入 NSMutableDictionary 时不是 nil