2012-12-29 101 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種顏色。做你的建議意味着,我有兩種顏色。透明,沒有。任何時候我需要一種新的顏色,我有兩次。不,我不想要這個。 –

相關問題