2010-05-31 9 views

Odpowiedz

16

Dla "publicznych" stałych, zadeklarować ją jako extern w pliku nagłówka (.h) i zainicjować go w pliku wdrażania (.m).

// File.h 
extern int const foo; 

następnie

// File.m 
int const foo = 42; 

Rozważ użycie enum jeżeli to nie tylko jeden, ale wiele stałe należące razem

+0

Co jeśli potrzebuję 'typedef NS_ENUM'? – ManuQiao

12

klas Objective C nie obsługują stałych członków. Nie możesz stworzyć stałej tak, jak chcesz.

Najbliższym sposobem deklarowania stałej związanej z klasą jest zdefiniowanie metody klasy, która ją zwraca. Możesz również użyć polecenia extern, aby uzyskać bezpośredni dostęp do stałych. Oba są przedstawione poniżej:

// header 
extern const int MY_CONSTANT; 

@interface Foo 
{ 
} 

+(int) fooConstant; 

@end 

// implementation 

const int MY_CONSTANT = 23; 

static const int FOO_CONST = 34; 

@implementation Foo 

+(int) fooConstant 
{ 
    return FOO_CONST; // You could also return 34 directly with no static constant 
} 

@end 

Zaletą wersji metoda klasy jest to, że może on zostać przedłużony, aby zapewnić stałe obiekty dość łatwo. Możesz użyć zewnętrznych obiektów, nakrętki musisz zainicjować je w metodzie initialize (chyba że są to ciągi znaków). Tak często można zobaczyć następujący wzór:

// header 
@interface Foo 
{ 
} 

+(Foo*) fooConstant; 

@end 

// implementation 

@implementation Foo 

+(Foo*) fooConstant 
{ 
    static Foo* theConstant = nil; 
    if (theConstant == nil) 
    { 
     theConstant = [[Foo alloc] initWithStuff]; 
    } 
    return theConstant; 
} 

@end 
+0

Dodałem jeszcze jeden kawałek, który właśnie mi się podoba: – JeremyP

+0

. Interesujące może być określenie, że wzorzec, który napisałeś, jest nazywany singletonem i jest często używany do udostępniania rzeczy w różnych aplikacjach. Dobrym przykładem w iPhone'ie jest klasa AppDelegate. – moxy

0

Prostym sposobem na typ wartości stałych takich liczb jest użycie enum hack jak zasugerował przez unbeli.

// File.h 
enum { 
    SKFoo = 1, 
    SKBar = 42, 
}; 

Jedną z zalet tego nad użyciem extern jest to, że wszystko jest rozwiązany w czasie kompilacji, więc nie jest potrzebna żadna pamięć do przechowywania zmiennych.

Inną metodą jest użycie static const, co miało zastąpić hackowanie wyrażeń w C/C++.

// File.h 
static const int SKFoo = 1; 
static const int SKBar = 42; 

Szybkie skanowanie przez nagłówków Apple pokazuje, że metoda wyliczenia Hack wydaje się być najlepszym sposobem na osiągnięcie tego w Objective-C i faktycznie go znaleźć czystsze i używać go samodzielnie.

Ponadto, jeśli tworzysz grupy opcji, powinieneś rozważyć użycie NS_ENUM do utworzenia stałych bezpiecznych.

// File.h 
typedef NS_ENUM(NSInteger, SKContants) { 
    SKFoo = 1, 
    SKBar = 42, 
}; 

Więcej informacji na NS_ENUM i jego kuzyn NS_OPTIONS jest dostępny na NSHipster.

Powiązane problemy