Использование Picker View - концепция сеттера, путаница геттера

Хорошо, вот мой код для простого PickerView, и он тоже работает.

@interface ViewController ()
@property NSArray *moods;
@end

@implementation ViewController


-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return [[self moods] count];
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return self.moods[row];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.moods = @[@"I" , @"Love", @"Stack", @"Overflow", @"Great!"];
}

Мой вопрос о запутанном поведении метода установки и получения с использованием свойств. Чтобы уточнить, я не знаю, почему (точка) нотация метода set работает, а стиль скобок - нет.

Например, по этому методу

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return self.moods[row];
}

Если я наберу это как

return [self moods[row]];

Это не работает Зачем? Это говорит отсутствующий идентификатор и о дальнейшем добавлении его также как это

return [self moods[[row]]];

Это не просто работает вообще. Он продолжает просить добавить идентификатор ошибки.

То же самое касается этого метода, где следующее работает нормально

    self.moods = @[@"I" , @"Love", @"Stack", @"Overflow", @"Great!"];

НО следующий стиль кода тоже не работает

    [self moods] = @[@"I" , @"Love", @"Stack", @"Overflow", @"Great!"];

или даже setValue для ключей в моем случае.

Хорошо, я согласен, что я довольно новичок в этом и пытаюсь самостоятельно учиться. Я попытался изучить Objective-C и приложить все усилия в этом на прошлой неделе и покрыл все те понятия там. Но это мой второй день в программировании на iOS, и мне трудно понять эту мелочь.

Можете ли вы помочь и руководство немного подробнее? Следуя небольшому видео о занятиях в Стэнфордском университете на iOS, они рекомендуют всегда использовать точечные обозначения для свойств. Но вы можете использовать оба, верно? Поэтому мне нужно понять и построить прочную основу. Спасибо!

1 ответ

Решение

id x = self.moods => геттер и его равно id x = [self moods]

self.moods = array => сеттер и его равен [self setMoods:newArray]

чтобы получить доступ к элементам:self.moods[index] ИЛИ ЖЕ [self moods][index]

Другие вопросы по тегам