我正在开发一款iphone应用程序,我需要在我的课程中使用全局功能。
但我怎么能这样做?
我刚尝试创建functions.h
喜欢这个
#include <Foundation/Foundation.h>
- (void)printTest;
和functions.m
#import "functions.h"
- (void)prinTest {
NSLog(@"test");
}
但它不起作用。我说:“方法定义不在@implementation上下文中。”
答案 0 :(得分:57)
这里有两个选择。首先是在静态类中创建一个类方法:
部首:
#import <Foundation/Foundation.h>
@interface GlobalStuff : NSObject {}
+ (void)printTest;
@end
实现:
#import "functions.h"
@implementation GlobalStuff
+ (void) printTest {
NSLog(@"test");
}
使用以下方式致电:
#import "functions.h"
...
[GlobalStuff printTest];
另一种选择是声明一个全局函数而不是类:
部首:
void GSPrintTest();
实现:
#import <Foundation/Foundation.h>
#import "functions.h"
void GSPrintTest() {
NSLog(@"test");
}
使用以下方式致电:
#import "functions.h"
...
GSPrintTest();
第三个(糟糕但可能)选项是为您的方法添加NSObject类别:
部首:
#import <Foundation/Foundation.h>
@interface NSObject(GlobalStuff)
- (void) printTest;
@end
实现:
#import "functions.h"
@implementation NSObject(GlobalStuff)
- (void) printTest {
NSLog(@"test");
}
@end
使用以下方式致电:
#import "functions.h"
...
[self printTest];
答案 1 :(得分:10)
如果需要全局函数,只需编写C函数即可。 objective-C语法仅用于对象的上下文中。
void printTest() {
NSLog(@"This is a test");
}
编辑:
您必须在functions.h
中添加声明:
void printTest();
答案 2 :(得分:3)
简单。您的设置几乎是完美的。
只需#include
您需要的所有课程中的Functions.h
,您应该全部设定。我一直这样做。
你将不得不使用某种对象,但是你可以通过使用NSObject
的类别来使其“感觉”就像一个全局的Objective-c函数:
NSObject
。现在只需调用
即可使用它们[self myCategoryMethod:optionalParameter];
答案 3 :(得分:0)
尝试将functions.m
重命名为functions.c
。
或者将此方法添加到某个班级SharedClass
中,并将其拒绝为静态:+ (void)prinTest
。然后您可以使用此代码访问它们
[SharedClass printTest];
答案 4 :(得分:0)
您的错误指的是您需要在界面中使用该方法。
@interface SomeClass
- (void)printTest;
@end
要在整个应用(包含您的Functions.h)中使用静态空白,请尝试以下操作:
void printTest ()
{
/* do your print stuff */
}