Использование 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]