2012-12-29 60 views
1

我有一个类别NSObject+Utilities,其中包含我在项目中使用的各种工具方法。不幸的是,我不得不向一个返回NSColor的方法添加一个参数。如何将另一个参数添加到现有方法

在这里的一个示例:

- (NSColor*) ccBlueLight { 
    return [self libMakeAColor :0.000f :0.535f :1.0f :1.000f]; 
} 

的最后一个参数(1.000f)负责为透明度。当我创建这种方法时,我没有想到透明度,并将其固定为1.000f。由于我在不同的项目中使用这些颜色,我不能简单地添加另一个参数,而不会在使用它们时在其他项目中出现错误。

有没有办法添加透明度参数没有问题?

+0

因此,让我直截了当地说:你想为方法添加一个参数......没有声明任何其他方法? – CodaFi

+1

为什么不简单地创建另一个名为'ccBlueLightWithAlpha:'的方法来接受alpha参数? – 2012-12-29 09:14:38

+0

然后蹦床从一个到另一个? – CodaFi

回答

0

是否这样?

- (NSColor*) ccBlueLight { 
    return [self libMakeAColorRed:0.000f green:0.535f blue:1.0f]; 
} 

- (NSColor*) ccBlueLightWithAlpha:(CGFloat)alpha { 
    return [self libMakeAColorRed:0.000f green:0.535f blue:1.0f alpha:alpha]; 
} 
+1

您不使用alpha arg。 – CodaFi

+0

糟糕!现在修复它.. – Kjuly

4

写与透明度参数的新方法:

- (NSColor*) ccBlueLight:(CGFloat)transparency { 
    return [self libMakeAColor :0.000f :0.535f :1.0f :transparency]; 
} 

并改变现有方法的实现,使用默认值。

- (NSColor*) ccBlueLight { 
    return [self ccBlueLight:1.000f]; 
} 

注意,这两个是不同的方法。旧的签名没有改变,也没有必要改变旧的签名。

+0

将方法名称更改为'ccBlueLightWithAlpha:',并且您从我那里得到+1 :)个人而言,我更喜欢能够读取代码并了解该参数的功能,而不必进入该方法 - 想象调用你的方法的代码(即'[self ccBlueLight:0.5]',我不知道是否为0。5是多么透明或是多么蓝,却不知道里面的方法是什么样子。 (当然恕我直言) – deanWombourne

+0

@deanWombourne,我同意你在名称中加入alpha更具可读性,但如果我们不改变名称,那么它看起来更像是方法重载,即使用带有参数或不带参数的'ccBlueLight',尽管它在技​​术上与C++,Java等中提供的方法重载不一样。可能只是它的个人偏好。 – taskinoor

+0

这完全是个人喜好!然而,obj-c给你命名的参数,java和c没有的东西,所以我个人会尝试使用它们,如果可能的话。 – deanWombourne

1

有没有什么反对简单添加第二种方法?所以一个项目可以使用原始的,另一个项目可以使用新的方法。

- (NSColor *) ccBlueLightWithAlpha:(NSNumber *)alpha 
{ 
    return [self libMakeAColor :0.000f :0.535f :1.0f :[alpha floatValue];  
} 
+0

正如我在另一条评论中所说的,我在NSObject + Utilities中有大约120种颜色。做你的建议意味着,我有两种颜色。透明,没有。任何时候我需要一种新的颜色,我有两次。不,我不想要这个。 –

相关问题