Как создать глобальные функции в Objective-C
Я разрабатываю приложение iphone, и мне нужно иметь некоторые функции для использования в глобальном масштабе в моих классах.
Но как я могу это сделать?
Я просто пытался создать functions.h
нравится это
#include <Foundation/Foundation.h>
- (void)printTest;
и в functions.m
#import "functions.h"
- (void)prinTest {
NSLog(@"test");
}
но это не сработает. Говорит мне: "Определение метода не в контексте @implementation".
Ответы
Ответ 1
Два варианта. Сначала создайте метод класса в статическом классе:
Заголовок:
#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];
Ответ 2
Если вам нужна глобальная функция, просто напишите обычную функцию C. Синтаксис Objective-C предназначен для использования исключительно в контексте методов объекта.
void printTest() {
NSLog(@"This is a test");
}
Вы также должны добавить объявление в заголовок functions.h
:
void printTest();
Ответ 3
Simple. Ваша установка почти идеальна.
Просто #include
ваш Functions.h
во всех классах, которые ему нужны, и вы должны быть настроены. Я делаю это все время.
Вам нужно будет использовать какой-то объект, но вы можете сделать его "чувствовать", как глобальную функцию objective-c, используя категорию NSObject
:
- Создайте новый файл и выберите Objective C Category.
- Сделайте его категорией
NSObject
.
- Используйте шаблоны для определения и реализации ваших методов.
Теперь вы можете использовать их просто, вызывая
[self myCategoryMethod:optionalParameter];
Ответ 4
Попробуйте переименовать functions.m
в functions.c
.
Или добавьте эти методы в некоторый класс SharedClass
и уменьшите их как static: + (void)prinTest
. Затем вы можете получить к ним доступ с помощью этого кода
[SharedClass printTest];
Ответ 5
Какова ваша ошибка, так это вам нужно иметь этот метод в интерфейсе.
@interface SomeClass
- (void)printTest;
@end
Чтобы использовать статическую пустоту в вашем приложении (где вы включили функции Functions.h), попробуйте выполнить следующее:
void printTest ()
{
/* do your print stuff */
}