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

Ссылка на статический NSString * const из другого класса

В классе A у меня есть следующее:

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

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

4b9b3361

Ответ 1

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

//ClassA.h
extern NSString * const kMyConstant;

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

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

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

Ответ 2

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

Затем объявите (в отличие от определения) строку в заголовке класса A:

extern NSString * const kMyConstant;

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

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

Ответ 3

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

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

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

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