Objective-C中的函数

Joh*_*ner 2 objective-c

我正在尝试编写一个函数,该函数返回从两个输入字符串创建的字符串;

但是当我尝试功能声明时

   NSString Do_Something(NSString str1, NSString str2)
   {

   }
Run Code Online (Sandbox Code Playgroud)

编译器生病了.(对于带有int参数的不同函数,可以正常工作.)

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

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

Mar*_*c W 8

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

NSString *Do_Something(NSString *str1, NSString *str2) { }
Run Code Online (Sandbox Code Playgroud)

另外,请记住,这是一个(C风格)函数,而不是写在Objective-C对象上的实例方法.如果你想让它实际上是一个对象的方法,它可能看起来像这样:

NSString *doSomethingWithString1:(NSString *)str1 string2:(NSString *)str2 { }
Run Code Online (Sandbox Code Playgroud)

我说"可能"因为你可以根据需要命名.

  • 我们实际上并不知道他想在哪里使用这个功能.有时,熟悉编程语言的人并没有意识到还有另一种方法可以做.当某人从C迁移到Objective-C并在各处继续使用C风格的函数时尤其如此.我对两个案例都进行了更正,因为OP没有明确提到他正在编写函数的上下文. (6认同)

Jed*_*ith 6

Objective-C中的函数完全正常(实际上可以获得一些语言的好处).

看到我对C函数的回答总是向Objective C返回零,其中有人正在尝试你的样子并且编译器遇到返回类型的问题.当您使用函数时,我在那里设置的结构非常重要,就像您使用对象和方法一样.一定要让你的标题正确.

要迂腐,你正在使用以下函数定义:

NSString *DoSomething(NSString *str1, NSString *str2) {
    // Drop the _ in the name for style reasons
}
Run Code Online (Sandbox Code Playgroud)

你应该在这样的文件中声明.h:

NSString *DoSomething(NSString *str1, NSString *str2);
Run Code Online (Sandbox Code Playgroud)

就像C.