在Objective-C中传递NSString参数

时间:2011-10-30 14:30:00

标签: objective-c

我有一个关于语法的简单问题:

NSString* inpword1 = @"eight";

NSString* outword1 = [lookFor theKey:inpword1];   // This line does not compile!!!!  

-(NSString*) lookFor: theKey: (NSString*) key;  // in the Spec (translator.h)

-(NSString*) lookFor: theKey: (NSString*) key;  // in the Body (translator.m)
{  
    NSString* entry = [[NSString alloc] init];  

    entry = [dictionary objectForKey:key];  

    return entry;  
}

除了一行外,所有内容都会编译。 如果语法存在明显问题,我无法弄明白。 任何帮助,将不胜感激。我能够正确地在字典中查找单词 但是当我使用lookFor作为包装器时,我似乎无法为调用获得正确的语法。

3 个答案:

答案 0 :(得分:2)

修改 在指出语法错误之前,我必须明确表示你不应该创建自己的函数来检索密钥的对象。这已经为您完成,只需致电[someDictionary objectForKey:@"YourKey"];

现在我们的语法问题 - 我在这里看到了3个主要问题:

  1. NSString* entry = [[NSString alloc] init]; //this allocation is useless and will result in a memory leak because later, you assign it with an object from the dictionary:

  2. [lookFor theKey:inpword1]; //This is just a wrong way to call a function:

  3. -(NSString*) lookFor: theKey: (NSString*) key //this is just a wrong way to declare a function.

  4. 你可能意味着:

    NSString* inpword1 = @"eight";
    
    NSString* outword1 = [self lookForKeyInDict:dict TheKey:inpword1];
    
    -(NSString*) lookForKeyInDict:(NSDictionary*)dict TheKey:(NSString*) key;
    
    -(NSString*) lookForKeyInDict:(NSDictionary*)dict TheKey:(NSString*) key
    {  
        NSString* entry;  
    
        entry = [dict objectForKey:key];  
    
        return entry;  
    }
    

答案 1 :(得分:2)

声明中:

NSString* outword1 = [lookFor theKey:inpword1];   // This line does not compile!!!!

lookFor是某个对象的实例。 theKey是发送给对象的消息。 班级lookFor的方法thekey的类型必须为NSString *

此外,Objective-C消息结构似乎存在混淆,考虑阅读Objective-C上的Apple文档,它将为您节省大量时间。

答案 2 :(得分:2)

语法[lookFor theKey:inpword1];表示您使用theKey:作为名为inpword1的对象的参数调用方法lookFor

语法-(NSString*) lookFor: theKey: (NSString*) key;声明了一个方法lookFor:theKey:,该方法将NSString*称为key作为参数并返回NSString*。不幸的是,在lookFor之后使用冒号意味着当您尝试调用此方法时,theKey将被视为参数,您将收到未声明的错误。除非引入参数,否则不应在方法名称中使用冒号,与theKey:一样。

所以,简而言之,我只记得:

  • Objective-C中的开头[之后是您正在呼叫的对象的名称。
  • 方法声明中的冒号引入参数。