如何在Objective-C中创建全局函数

Fre*_*ins 31 iphone objective-c

我正在开发一个iphone应用程序,我需要在我的课程中使用全局功能.

但是我怎么能这样做呢?

我只是试图创造functions.h喜欢这个

#include <Foundation/Foundation.h>

- (void)printTest;
Run Code Online (Sandbox Code Playgroud)

并在 functions.m

#import "functions.h"

- (void)prinTest {
    NSLog(@"test");
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我说:"方法定义不在@implementation上下文中".

Ed *_*rty 61

这里有两个选择.首先是在静态类中创建一个类方法:

标题:

#import <Foundation/Foundation.h>

@interface GlobalStuff : NSObject {}

+ (void)printTest;

@end
Run Code Online (Sandbox Code Playgroud)

执行:

#import "functions.h"

@implementation GlobalStuff

+ (void) printTest {
  NSLog(@"test");
}
Run Code Online (Sandbox Code Playgroud)

使用呼叫:

#import "functions.h"

...
[GlobalStuff printTest];
Run Code Online (Sandbox Code Playgroud)

另一种选择是声明一个全局函数而不是类:

标题:

void GSPrintTest();
Run Code Online (Sandbox Code Playgroud)

执行:

#import <Foundation/Foundation.h>
#import "functions.h"
void GSPrintTest() {
  NSLog(@"test");
}
Run Code Online (Sandbox Code Playgroud)

使用呼叫:

#import "functions.h"
...
GSPrintTest();
Run Code Online (Sandbox Code Playgroud)

第三个(坏的,但可能的)选项是为您的方法添加NSObject的类别:

标题:

#import <Foundation/Foundation.h>

@interface NSObject(GlobalStuff)
- (void) printTest;
@end
Run Code Online (Sandbox Code Playgroud)

执行:

#import "functions.h"

@implementation NSObject(GlobalStuff)
- (void) printTest {
  NSLog(@"test");
}
@end
Run Code Online (Sandbox Code Playgroud)

使用呼叫:

#import "functions.h"
...
[self printTest];
Run Code Online (Sandbox Code Playgroud)


Eel*_*lke 12

如果需要全局函数,只需编写C函数即可.objective-C语法仅用于对象的上下文中.

void printTest() {
    NSLog(@"This is a test");
}
Run Code Online (Sandbox Code Playgroud)

编辑:

您必须在以下位置添加声明functions.h:

void printTest();
Run Code Online (Sandbox Code Playgroud)

  • @Fred Collins - 没有Obj-C功能.Objective-C仅实现Objective-C方法和C函数. (2认同)