Как константы инициализируются в заголовочных файлах Objective C?

Как Вы инициализируете константу в заголовочном файле?

Например:

@interface MyClass : NSObject {

  const int foo;

}

@implementation MyClass

-(id)init:{?????;}
8
задан FreeAsInBeer 14 March 2013 в 04:05
поделиться

2 ответа

Для "публичных" констант вы объявляете их как extern в вашем заголовочном файле (.h) и инициализируете их в вашем файле реализации (.m).

// File.h
extern int const foo;

затем

// File.m
int const foo = 42;

Рассмотрите возможность использования enum, если речь идет не об одной, а о нескольких константах, принадлежащих друг другу

.
17
ответ дан 5 December 2019 в 05:44
поделиться

Классы Objective C не поддерживают константы в качестве членов. Вы не можете создать константу так, как хотите.

Ближайший способ объявить константу, связанную с классом, - это определить метод класса, который ее возвращает. Вы также можете использовать extern для прямого доступа к константам. Оба они показаны ниже:

// header
extern const int MY_CONSTANT;

@interface Foo
{
}

+(int) fooConstant;

@end

// implementation

const int MY_CONSTANT = 23;

static const int FOO_CONST = 34;

@implementation Foo

+(int) fooConstant
{
    return FOO_CONST; // You could also return 34 directly with no static constant
}

@end

Преимущество версии метода класса состоит в том, что ее можно легко расширить для предоставления константных объектов. Вы можете использовать внешние объекты, ну, вы должны инициализировать их в методе инициализации (если они не являются строками).Таким образом, вы часто будете видеть следующий шаблон:

// header
@interface Foo
{
}

+(Foo*) fooConstant;

@end

// implementation

@implementation Foo

+(Foo*) fooConstant
{
    static Foo* theConstant = nil;
    if (theConstant == nil)
    {
        theConstant = [[Foo alloc] initWithStuff];
    }
    return theConstant;
}

@end
12
ответ дан 5 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: