【问题标题】:Why does this method signature work?为什么这个方法签名有效?
【发布时间】:2013-02-03 14:49:52
【问题描述】:

我刚刚遇到了一些具有这样方法的代码:

- (void) AddImage:(NSString *)imageURL: (UIImage *)image{
    [imgCache setObject:image forKey:imageURL];
}

通常我会看到这样的方法:

-(typeReturned)methodParameter1:(Param1Type)name1 Parameter2:(Param2Type)name2{
    //do something
}

但是这个方法好像省略了Parameter2。为什么会这样?

【问题讨论】:

    标签: ios methods method-signature


    【解决方案1】:

    这至少不常见并且会引发警告。 “imageURL”不是“Parameter2”而是“name1”。所以“Parameter2”是空的。你可以这样称呼它:

    [self AddImage:@"eins" :[UIImage imageNamed:@"1.png"]];
    

    我会避免它:)。

    【讨论】:

    • 我不明白。你是什​​么意思 imageURL 是 name1?
    • 第一个方法的名字是AddImage::imageURLimage 不是方法名称的一部分,它们是参数的任意占位符名称。
    • 是的,我知道它们是参数,但我要说的是,通常传入的每个参数都有一个定义的类型和一个小的前缀,例如:withImage:forURL: etc...这个方法有一个imageURL 的前缀,但不是图像的前缀。
    • @marciokoko 你是对的,但只是在约定的意义上。通常将方法命名为-(void)doSomeThingObj1:(id)obj1 andObj2:(id)obj2。但就编译器和运行时而言,AddImage:: 是完全合法的。
    • 酷!好的,所以你可以省略除第一个前缀之外的所有内容...比如 = -(void)methodNameWithSomeObject:(type)name1 :(type)name2 :(type)name3...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多