代码之家  ›  专栏  ›  技术社区  ›  John R Doner

目标C中的功能

  •  2
  • John R Doner  · 技术社区  · 16 年前

    我试图编写一个函数,它返回由两个输入字符串创建的字符串;

    但是当我尝试函数声明时

       NSString Do_Something(NSString str1, NSString str2)
       {
    
       }
    

    编译器生病了。(对于具有int参数的不同函数,效果很好。)

    如果我将输入参数更改为指向字符串的指针,也会生病。

    那么,如何将Objective-C对象传递到函数中呢?

    3 回复  |  直到 16 年前
        1
  •  8
  •   Marc W    16 年前

    传递给函数的所有Objective-C对象都必须是指针。像这样重写它将修复编译器错误:

    NSString *Do_Something(NSString *str1, NSString *str2) { }
    

    另外,请记住这是一个(C样式)函数,而不是一个写在Objective-C对象上的实例方法。如果您希望它实际上是一个对象上的方法,它可能看起来像这样:

    NSString *doSomethingWithString1:(NSString *)str1 string2:(NSString *)str2 { }
    

    我说“可能”,因为你可以随意命名。

        2
  •  6
  •   Community Mohan Dere    9 年前

    在Objective-C中,函数是完美的(事实上,它可以从语言中获得一些好处)。

    看看我的答案 C function always returns zero to Objective C ,其中有人尝试了您所做的操作,但编译器假定的返回类型有问题。我在那里设置的结构在使用函数时很重要,就像使用对象和方法一样。确保你的邮件头正确。

    为了学究,你在使用一个函数 定义 的:

    NSString *DoSomething(NSString *str1, NSString *str2) {
        // Drop the _ in the name for style reasons
    }
    

    你应该是 宣告 它在一个 .h 像这样的文件:

    NSString *DoSomething(NSString *str1, NSString *str2);
    

    就像C一样。

        3
  •  0
  •   Néstor    16 年前

    那对我不起作用。我刚刚在.h中声明: nsstring*myfunction(nsdecimal*value);

    我输入.m: nsstring*myfunction(nsdecimal*value){ /代码 }

    但我总是会得到一个错误,说预期的“(”在“*”标记之前)

    现在是固定的。出于某种原因…对不起的。