标题中的Obj-C函数声明

时间:2011-10-24 23:24:18

标签: objective-c function

我试图将一个C风格的函数放在Objective-C类的头文件中。 (我的术语在这里可能是错的 - 我只是习惯于编写Objective-C类方法而不是函数)。它看起来如下:

// Sort function
NSInteger sort(NSString *aString, NSString *bString, void *context);

NSInteger sort(NSString *aString, NSString *bString, void *context) {
    return [aString compare:bString options:NSNumericSearch];
}

不可避免地导致:

  

在'{'令牌

之前预期'=',',',';','asm'或'属性'

关于我缺少什么的任何想法?谢谢。

3 个答案:

答案 0 :(得分:11)

我的猜测是你将函数定义放在类的@interface中。相反,请确保C样式函数声明不在Objective-C @interface声明中:

// declare C functions here
NSInteger sort(NSString *aString, NSString *bString, void *context);

@interface MyClass : NSObject
{
  // class instance vars
}

// class properties & instance methods
@end

答案 1 :(得分:2)

您的函数正文需要位于.m文件中而不是标题中。

只要您的函数声明(NSInteger sort(NSString *aString, NSString *bString, void *context);)保留在标题中,您仍然可以从导入标题的任何位置访问排序函数。

答案 2 :(得分:1)

在声明C-Styled方法时,您必须忘记 - 或+。只需在@end语句之前将该方法声明为标准C语言:

void function_name(int, int);