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

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

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

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

Ответы на вопрос(3)

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

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

extern NSString * const kMyConstant;

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

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

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

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

// ClassA.m

NSString *const str = @"Foo";

// ClassB.m

extern NSString *const str;

NSLog(@"str is: %@", str);
Решение Вопроса

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

//ClassA.h
extern NSString * const kMyConstant;

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

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

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

Ваш ответ на вопрос