Как объявить функцию в Cocoa после функции, использующей ее?

StackOverflow https://stackoverflow.com/questions/483664

Вопрос

Я медленно довожу свое приложение до рабочего состояния.

Я использую две функции под названием setCollection и addToCollection.Обе эти функции принимают NSArray в качестве ввода.

У меня также есть функция под названием add в котором я использую обе эти функции.Когда я пытаюсь скомпилировать, Xcode показывает ошибку:

'setCollection' необъявлен (первое использование в этой функции)

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

Обычно я php-кодер.способ, которым Php справляется с этим, является первым.Вызываемые функции должны располагаться перед функциями, которые их используют, иначе они просто не существуют.Есть ли способ сделать функции доступными во время выполнения, или мне следует переставить все функции, чтобы они работали правильно?

Это было полезно?

Решение

Если ваши функции глобальные (не являются частью класса), вам просто нужно поместить объявление перед использованием, как предлагает eJames.

Если ваши функции на самом деле являются методами (частью класса), вам необходимо объявить анонимную категорию вашего класса перед реализацией и поместить объявления своих методов в этот интерфейс:

@interface Myclass()
- (void) setCollection:(NSArray*)array;
- (void) addToCollection:(NSArray*)array;
@end

@implementation Myclass

// Code that calls setCollection or addToCollection

- (void) setCollection:(NSArray*)array
{
    // your code here
}

- (void) addToCollection:(NSArray*)array
{
    // your code here
}

@end

Таким образом, вам не нужно раскрывать свои функции в главном интерфейсе MyClass.

Другие советы

Вы можете объявить функции заранее следующим образом:

void setCollection(NSArray * array);
void addToCollection(NSArray * array);

//...

// code that calls setCollection or addToCollection

//...

void setCollection(NSArray * array)
{
    // your code here
}

void addToCollection(NSArray * array)
{
    // your code here
}

Если вы создаете собственный класс, и это функции-члены (обычно называемые методами в Objective-C), вам следует объявить методы в заголовке вашего класса и определить их в исходном файле вашего класса:

//MyClass.h:
@interface MyClass : NSObject
{

}

- (void)setCollection:(NSArray *)array;
- (void)addToCollection:(NSArray *)array;

@end


//MyClass.m:

#import "MyClass.h"

@implementation MyClass

- (void)setCollection:(NSArray *)array
{
    // your code here
}

- (void)addToCollection:(NSArray *)array
{
    // your code here
}

@end


//some other source file

#import "MyClass.h"

//...

MyClass * collection = [[MyClass alloc] init];
[collection setCollection:someArray];
[collection addToCollection:someArray];

//...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top