Подтвердить что ты не робот

Как создать глобальные функции в Objective-C

Я разрабатываю приложение iphone, и мне нужно иметь некоторые функции для использования в глобальном масштабе в моих классах.

Но как я могу это сделать?

Я просто пытался создать functions.h нравится это

#include <Foundation/Foundation.h>

- (void)printTest;

и в functions.m

#import "functions.h"

- (void)prinTest {
    NSLog(@"test");
}

но это не сработает. Говорит мне: "Определение метода не в контексте @implementation".

4b9b3361

Ответ 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 */
}