Вопрос по objective-c, static, constants – Ссылка на статический NSString * const из другого класса

21

В классе А у меня есть это:

static NSString * const kMyConstant = @"my constant string";

Как я могу сослаться на это из класса B?

Ваш Ответ

3   ответа
13

Вам необходимо удалитьstatic - это указывает, чтоkMyConstant виден только в файлах, связанных с этим.

Затем объявить (в отличие отdefining) строка в заголовке класса A:

extern NSString * const kMyConstant;

и импортируйте этот заголовок, где вы хотите использовать эту строку.extern декларация говорит, что существуетNSString * const по имениkMyConstant чье хранилище создано в каком-то другом месте.

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

47

Вы должны добавить свою строку в заголовок, а затем определить строку в реализации.

//ClassA.h
extern NSString * const kMyConstant;

//ClassA.m
NSString * const kMyConstant = @"my constant string";

//ClassB.h/m
#import "ClassA.h"

...
    NSLog(@"String Constant: %@", kMyConstant);
4

Если он статический, вы не можете (это то, для чего предназначено ключевое слово static).

Если вы просто объявите ее как глобальную переменную, вы можете сделать что-то вроде этого:

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

NSLog(@"str is: %@", str);

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