Станом на Xcode 8, ви можете визначити властивості класу в Obj-C. Це було додано до взаємодії зі статичними властивостями Свіфта.
Тепер Objective-C підтримує властивості класу, які взаємодіють із властивостями типу Swift. Вони оголошуються як: @property (клас) NSString * someStringProperty ;. Вони ніколи не синтезуються. (23891898)
Ось приклад
@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
Тоді ви можете отримати доступ до нього так:
YourClass.currentId = 1;
val = YourClass.currentId;
Ось дуже цікавий пояснювальний пост, який я використав як посилання для редагування цієї старої відповіді.
Відповідь 2011 року: (не використовуйте це, це жахливо)
Якщо ви дійсно не хочете оголошувати глобальну змінну, є інший варіант, можливо, не дуже ортодоксальний :-), але працює ... Ви можете оголосити такий метод "get & set", як цей, зі статичною змінною всередині:
+ (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;
}
Отже, якщо вам потрібно отримати значення, просто зателефонуйте:
NSString *testVal = [MyClass testHolder:nil]
А потім, коли ви хочете його встановити:
[MyClass testHolder:testVal]
У випадку, коли ви хочете встановити цю псевдостатичну вару на нуль, ви можете оголосити testHolder
так:
+ (NSString*)testHolderSet:(BOOL)shouldSet newValue:(NSString*)_test {
static NSString *test;
if(shouldSet) {
if(test != nil)
[test release];
test = [_test retain];
}
return test;
}
І два зручні методи:
+ (NSString*)test {
return [MyClass testHolderSet:NO newValue:nil];
}
+ (void)setTest:(NSString*)_test {
[MyClass testHolderSet:YES newValue:_test];
}
Сподіваюся, це допомагає! Удачі.