Xcode 8'den itibaren, Obj-C'de sınıf özelliklerini tanımlayabilirsiniz. Bu, Swift'in statik özellikleri ile birlikte çalışmak için eklendi.
Objective-C artık Swift tür özellikleri ile birlikte çalışan sınıf özelliklerini desteklemektedir. @Property (class) NSString * someStringProperty; olarak bildirilirler. Asla sentezlenmezler. (23891898)
İşte bir örnek
@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
Sonra bu şekilde erişebilirsiniz:
YourClass.currentId = 1;
val = YourClass.currentId;
İşte bu eski cevabı düzenlemek için referans olarak kullandığım çok ilginç bir açıklayıcı gönderi .
2011 Cevap: (bunu kullanmayın, korkunç)
Gerçekten küresel bir değişken bildirmek istemiyorsanız, başka bir seçenek, belki de çok ortodoks değil :-), ama işe yarıyor ... İçinde statik bir değişken ile böyle bir "get & set" yöntemi bildirebilirsiniz:
+ (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;
}
Bu nedenle, değeri almanız gerekiyorsa, şunu arayın:
NSString *testVal = [MyClass testHolder:nil]
Ve sonra, ayarlamak istediğinizde:
[MyClass testHolder:testVal]
Bu pseudo-static-var değerini nil olarak ayarlamak istediğinizde, şu şekilde bildirebilirsiniz testHolder
:
+ (NSString*)testHolderSet:(BOOL)shouldSet newValue:(NSString*)_test {
static NSString *test;
if(shouldSet) {
if(test != nil)
[test release];
test = [_test retain];
}
return test;
}
Ve iki kullanışlı yöntem:
+ (NSString*)test {
return [MyClass testHolderSet:NO newValue:nil];
}
+ (void)setTest:(NSString*)_test {
[MyClass testHolderSet:YES newValue:_test];
}
Umarım yardımcı olur! İyi şanslar.