При объявлении Свойства, Синтезирование и Реализация интервала [] выстраивают в Objective C

Вот пример Swift 3+, Xcode 8+ с кодом:

class MySuperbClass{
    let a = 4
    func getClassName() -> String? {
        return String(describing: type(of:self)).components(separatedBy: ".").first
    }
}


let className = String(describing: type(of:MySuperbClass.self)).components(separatedBy: ".").first
//className = "MySuperbClass" 
let classNameFromObject = MySuperbClass().getClassName()
//classNameFromObject = "MySuperbClass"
7
задан 26 May 2009 в 18:23
поделиться

3 ответа

Я думаю, что нужно "Какао-у" скрыть массив int, даже если вы используете его для внутренних целей. Что-то вроде:

@interface Lottery : NSObject {
    int numbers[5];
}

- (int)numberAtIndex:(int)index;
- (void)setNumber:(int)number atIndex:(int)index;
@end

@implementation Lottery

- (int)numberAtIndex:(int)index {
    if (index > 4)
        [[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
    return numbers[index];
}

- (void)setNumber:(int)number atIndex:(int)index {
    if (index > 4)
        [[NSException exceptionWithName:NSRangeException reason:[NSString stringWithFormat:@"Index %d is out of range", index] userInfo:nil] raise];
    numbers[index] = number;
}
9
ответ дан 6 December 2019 в 23:13
поделиться

Вы не должны использовать int в этом случае, если хотите использовать массив. Используйте NSNumber и поместите эти 5 NSNumber в NSMutableArray.

@interface testClass: NSObject {
     NSMutableArray* numbers;
}
@property (nonatomic, retain) NSMutableArray* numbers;
-(id)initWithValue:(NSNumber *)initialValue;
@end


@implementation testClass
@synthesize numbers;
-(id)initWithValue:(NSNumber *)initialValue {
     numbers = [[NSMutableArray alloc] initWithCapacity:5];
     [numbers addObject:initialValue];
     return self;
 }
@end

Это код для интерфейса и реализации с синтезом (не тестировалось, BTW). Чего вы пытаетесь достичь?

Хорошее краткое введение

0
ответ дан 6 December 2019 в 23:13
поделиться

У меня есть переменная класса:

NSInteger myInt[5];

Чтобы я мог использовать в своем коде обычный синтаксис myInt [1] = 0, я создал свойство, которое возвращает целочисленный указатель:

@property (nonatomic, readonly) NSInteger *myInt;

Затем создал следующий метод получения:

-(NSInteger *) myInt {
  return myInt
}

Теперь я могу использовать что-то вроде class.myInt [1] = 0;

Ну, я не знаю наверняка, что это работает, но похоже, что это так. Я просто подумал, что выложу это, если кто-то еще захочет попробовать.

0
ответ дан 6 December 2019 в 23:13
поделиться