2013-05-02 13 views
13

Jak utworzyć klasę Objective-C za pomocą zmiennych na poziomie klasy, takich jak ta klasa Java?Deklaracja statycznych zmiennych składowych, takich jak Java w Objective-C

public class test 
{ 

    public static final String tableName = "asdfas";  
    public static final String id_Column = "_id"; 
    public static final String Z_ENT_Column = "Z_ENT"; 

} 

Chcę uzyskać do nich dostęp bez instancji, jak:

String abc = test.tableName; 
+0

Czy pytasz o metody klasowe w Obj-c? –

+0

static NSString * CellIdentifier = @ "reuseStaticIdentifier"; –

+0

nie, zobacz klasę Java, o której mowa, chcę coś takiego. –

Odpowiedz

26

Wygląda jak chcesz tworzyć stałych (ponieważ używasz final w swoim pytaniu). W Objective-C można użyć do tego celu extern.

zrobić coś takiego:

1) Tworzenie nowej klasy Objective-C nazwanych stałych.

2) W pliku nagłówka (.h):

extern const NSString *SERVICE_URL; 

3) W realizacji (.) Plik m:

NSString *SERVICE_URL = @"http://something/services"; 

4) Dodaj #import "Constants.h" do dowolnej klasy, w którym chcesz go używać

5) dostęp bezpośrednio jako NSString *url = SERVICE_URL;


Jeśli nie chcesz tworzyć stałych i po prostu chcesz użyć static w Objective-C, niestety możesz użyć tylko static w pliku implementacyjnym (.m). Dostęp do nich można uzyskać bezpośrednio, bez poprzedzania nazwy klasy.

Na przykład:

static NSString *url = @"something"; 

Mam nadzieję, że to pomaga.

+0

extern nie są traktowane jako najlepszy sposób programowania. –

+0

'const' w' const NSString * 'nie ma znaczenia. nie wolno ci manipulować obiektem wskazywanym bezpośrednio przez wskaźnik, tak czy inaczej. – newacct

+0

@AnoopVaidya: co jest nie tak z 'extern'? W oryginalnym kodzie Java, zmienna ta jest specyficznie "public", co oznacza, że ​​powinny być użyteczne z innych plików. 'extern' jest dokładnie tym, co na to pozwala. – newacct

22

Spróbuj ....

static NSString *CellIdentifier = @"reuseStaticIdentifier"; 

można uzyskać dostęp za pomocą bezpośredniego wartość nieruchomości lub syntezy
możesz użyć NSUserDefaults do przechowywania i pobierania wartości

Opis

@interface MyClass : NSObject 
+(NSString *)myFullName; 
@end 

Realizacja:

#import "MyClass.h" 

@implementation MyClass 
static NSString *fullName = @"Hello World"; 

+(NSString *)myFullName{ 
    return fullName; 
} 
@end 

Zastosowanie:

#import "MyClass.h" 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 
    NSLog(@"%@",[MyClass myFullName]); //no instance but you are getting the value. 
} 

@end 

nadzieję, że pomogło.

1

Objective-C nie posiada zmienne klasy

Polecam wprowadzenie statycznego NSString w pliku implementacji klasy i zapewniają metody klasy do niego dostęp

@implementation MyClass 

static NSString* str; 
1

można zrobić jak że:

@interface Test 
{ 
    static NSString *tableName; 
} 

+(NSString *) getTableName; 
@end 

@implementation Test 
+ (NSString *)getTableName 
{ 
    return tableName; 
} 
@end 

A potem sprowadzić go:

NSString *name = [Test getTableName]; 
7

Musisz użyć metody klasy, aby uzyskać dostęp do wszystkiego, co można nazwać bez tworzenia instancji.

@interface MyClass : NSObject 
+(NSString *)myFullName; 
@end 

Realizacja:

#import "MyClass.h" 

@implementation MyClass 
    static NSString *[email protected]"anoop vaidya"; 

+(NSString *)myFullName;{ 
    return fullName; 
} 
@end 

Jak używać:

#import "MyClass.h" 

@implementation AppDelegate 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{ 
    NSLog(@"%@",[MyClass myFullName]); //no instance but you are getting the value. 
} 

@end 
1

Myślę, że najlepszym sposobem częściej stosowane jest użycie stałe teksty takie jak

enum{ 
    GSPAYMENT_METHOD_CARD = 1, 
    GSPAYMENT_METHOD_CASH = 2, 
    GSPAYMENT_METHOD_VOID = 3 
}; 
typedef NSUInteger PaymentMethodType; 

Tuż przed @interface GSPaymentMethod

W ten sposób można wykorzystać te stałe wszędzie tylko o tym plik

.h

Na przykład

[self newPayment:GSPAYMENT_METHOD_CASH]

Powiązane problemy