【问题标题】:How to add another parameter to an existing method如何向现有方法添加另一个参数
【发布时间】:2012-12-14 08:27:48
【问题描述】:

我有一个类别NSObject+Utilities,其中包含我在项目中使用的各种工具方法。不幸的是,我必须在返回NSColor 的方法中再添加一个参数。

这里是一个例子:

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

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

有没有什么方法可以毫无问题地添加透明度参数?

【问题讨论】:

  • 所以让我直截了当地说:您想为方法添加参数...而不声明任何其他方法?
  • 为什么不简单地创建另一个名为 ccBlueLightWithAlpha: 的方法来接受 alpha 参数?
  • 然后蹦床从一个到另一个?
  • 是的,我希望该参数仅在存在时使用。文档听起来好像没有办法。但谁知道呢。
  • 所以就按照下面的人做的吧。有一些可怕的运行时黑客或块可以工作......但这对于你想要做的事情来说太复杂了。老实说,这不值得努力

标签: objective-c methods parameters add


【解决方案1】:

编写一个带有透明度参数的新方法:

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

并更改现有方法的实现以使用默认值。

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

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

【讨论】:

  • 将方法名称更改为ccBlueLightWithAlpha:,你会得到我的+1 :) 就个人而言,我更喜欢能够阅读代码并了解参数的作用而不必去进入方法 - 想象调用您的方法的代码(即[self ccBlueLight:0.5],我不知道 0.5 是否透明或蓝色,而不知道该方法内部的样子。(恕我直言当然)跨度>
  • @deanWombourne,我同意你的观点,在名称中添加 alpha 更具可读性,但如果我们不更改名称,那么它看起来更像是方法重载,即使用 ccBlueLight 带参数或不带参数,尽管它在技术上与 C++、Java 等中可用的方法重载不同。可能只是个人喜好。
  • 这完全是个人喜好!但是,obj-c 为您提供了命名参数,这是 java 和 c 所没有的,所以我个人会尽可能尝试使用它们。
【解决方案2】:

有什么反对简单地添加第二种方法的吗?这样一个项目可以使用原来的方法,另一个可以使用新方法。

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

【讨论】:

  • 正如我在另一条评论中所说,我在 NSObject+Utilities 中有大约 120 种颜色。做你建议的意思是,我每种颜色都有两次。有透明度和没有。每当我需要一种新颜色时,我都会有两次。不,我不想要这个。
【解决方案3】:

像这样?

- (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];
}

【讨论】:

  • 你没有使用 alpha 参数。
猜你喜欢
  • 2019-01-16
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-23
  • 2015-11-02
  • 1970-01-01
  • 2011-09-24
  • 2013-06-20
相关资源
最近更新 更多