Ab Xcode 8 können Sie Klasseneigenschaften in Obj-C definieren. Dies wurde hinzugefügt, um mit den statischen Eigenschaften von Swift zusammenzuarbeiten.
Objective-C unterstützt jetzt Klasseneigenschaften, die mit Swift-Typ-Eigenschaften zusammenarbeiten. Sie werden deklariert als: @property (Klasse) NSString * someStringProperty;. Sie werden niemals synthetisiert. (23891898)
Hier ist ein Beispiel
@interface YourClass : NSObject
@property (class, nonatomic, assign) NSInteger currentId;
@end
@implementation YourClass
static NSInteger _currentId = 0;
+ (NSInteger)currentId {
return _currentId;
}
+ (void)setCurrentId:(NSInteger)newValue {
_currentId = newValue;
}
@end
Dann können Sie folgendermaßen darauf zugreifen:
YourClass.currentId = 1;
val = YourClass.currentId;
Hier ist ein sehr interessanter erklärender Beitrag, den ich als Referenz verwendet habe, um diese alte Antwort zu bearbeiten.
2011 Antwort: (benutze das nicht, es ist schrecklich)
Wenn Sie wirklich wirklich keine globale Variable deklarieren möchten, gibt es eine andere Option, die vielleicht nicht sehr orthodox ist :-), aber funktioniert ... Sie können eine "get & set" -Methode wie diese mit einer statischen Variablen deklarieren:
+ (NSString*)testHolder:(NSString*)_test {
static NSString *test;
if(_test != nil) {
if(test != nil)
[test release];
test = [_test retain];
}
// if(test == nil)
// test = @"Initialize the var here if you need to";
return test;
}
Wenn Sie den Wert erhalten möchten, rufen Sie einfach an:
NSString *testVal = [MyClass testHolder:nil]
Und dann, wenn Sie es einstellen möchten:
[MyClass testHolder:testVal]
Wenn Sie diese pseudostatische Variable auf null setzen möchten, können Sie Folgendes deklarieren testHolder
:
+ (NSString*)testHolderSet:(BOOL)shouldSet newValue:(NSString*)_test {
static NSString *test;
if(shouldSet) {
if(test != nil)
[test release];
test = [_test retain];
}
return test;
}
Und zwei praktische Methoden:
+ (NSString*)test {
return [MyClass testHolderSet:NO newValue:nil];
}
+ (void)setTest:(NSString*)_test {
[MyClass testHolderSet:YES newValue:_test];
}
Ich hoffe es hilft! Viel Glück.