Ссылка на статический NSString * const из другого класса
В классе A у меня есть следующее:
static NSString * const kMyConstant = @"my constant string";
Как я могу ссылаться на это из класса B?
Ответы
Ответ 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);