目标C中的多个方法部分

Par*_*lia 5 iphone xcode objective-c ios

我正在学习Objective C,并在阅读方法时注意到这个时髦的怪癖.

像Java和C++一样,Obj.C可以接受多个参数,这很好,但是它声明客观的C方法可以有多个名称,这些名称似乎并不适合我.

例如:

-(NSArray *)shipsAtPoint:(CGPoint)bombLocation withDamage:(BOOL)damaged;
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,有两个参数,bombLocation(返回类型CGPoint)和损坏的(返回类型BOOL),并且方法名称旁边似乎被拆分为shipatpoint:withDamage

我不明白这是什么...当它声明一个方法可以有多个名字时它意味着什么?这仅适用于需要多个参数的方法吗?或者,假设我想用单个名称命名我的方法,但是为它提供了多个参数,是可能的还是我必须为它提供多个名称,每个名称对应一个参数?如果是,那为什么呢?

感谢您与我的混乱!:)

Mat*_* S. 6

原因是让它更容易理解.

在您的示例中,该方法在C++中将是这样的:

 int shipsAtPointWithDamage (CGPoint bomb, BOOL damage)  //I don't really know C++ 
Run Code Online (Sandbox Code Playgroud)

好的,所以第一个参数是船的点,损坏是第二个参数.这很容易弄清楚,但是那就是事情,你必须弄清楚,你必须看看方法来尝试找出每个东西是什么.

在Objective-C中你有

-(NSArray *)shipsAtPoint:(CGPoint)bombLocation withDamage:(BOOL)damaged;

每个参数都有明确的定义,第一个是船的点,第二个是损坏. 它读起来就像一个句子,而使用C++(以及几乎所有其他语言)则不然.

如果你想让一个方法在Obj-C中有多个参数,你必须这样写:

-(returnType)paraOne:(type*)name paraTwo:(type*)name

这是需要习惯的东西,每种语言都不同.一旦你习惯了Objective-C做事的方式,你会认为这绝对是太棒了.

编辑:并且正如filipe所指出的,因为该方法作为多个参数并不意味着它有多个名称,在我上面给出的示例中,方法名称将是paraOne:paraTwo,NOTparaOne:

  • 只是为了添加答案,这并不意味着该方法具有_multiple names_,只是`:`是名称的一部分.所以在那个例子中,方法的名称不仅仅是"shipsAtPoint",方法的全名是"shipsAtPoint:withDamage:" (5认同)