w klasie A mam to:Odwoływanie statyczny NSString * const z innej klasy
static NSString * const kMyConstant = @"my constant string";
Jak mogę odwoływać się do tego z klasy B?
w klasie A mam to:Odwoływanie statyczny NSString * const z innej klasy
static NSString * const kMyConstant = @"my constant string";
Jak mogę odwoływać się do tego z klasy B?
Należy extern swój ciąg w nagłówku, a następnie zdefiniować ciąg w realizacji.
//ClassA.h
extern NSString * const kMyConstant;
//ClassA.m
NSString * const kMyConstant = @"my constant string";
//ClassB.h/m
#import "ClassA.h"
...
NSLog(@"String Constant: %@", kMyConstant);
Musisz usunąć static
- który określa, że jest widoczny tylko w plikach powiązanych z tym.
Następnie zadeklarować (w przeciwieństwie do definiującej) ciąg w nagłówku Klasa A to:
extern NSString * const kMyConstant;
i import że nagłówku gdziekolwiek chcesz używać ten ciąg. Deklaracja extern
mówi, że istnieje NSString * const
o nazwie kMyConstant
, której pamięć jest tworzona w innym miejscu.
Jeśli definicja statyczna to już w nagłówku, musisz przenieść ją gdzie indziej (zwykle plik implementacji). Rzeczy można zdefiniować tylko raz, a jeśli spróbujesz zaimportować plik, który definiuje zmienną, dostaniesz błąd linkera.
Jeśli jest statyczny, nie można (do tego służy słowo kluczowe static).
Jeśli po prostu zadeklarować ją jako zmienną globalną, jednak można zrobić coś takiego:
// ClassA.m
NSString *const str = @"Foo";
// ClassB.m
extern NSString *const str;
NSLog(@"str is: %@", str);