使用 Picker View - setter、getter 概念混淆
Using Picker View - concept of setter, getter confusion
好的,这是我的简单 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!"];
}
我的问题是关于使用属性的 setter 和 getter 方法的混淆行为。为了进一步澄清,我不知道为什么 setter 方法的 .(dot) 符号有效而括号样式无效。
比如在这个方法下
-(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 forKey。
好吧,我承认我对此还很陌生,正在努力自学。上周我尝试学习 Objective-C 并尽力而为,并在那里涵盖了所有这些概念。但这是我在 iOS 编程的第二天,我发现这些小东西很难掌握。
能否请您帮助和详细指导一下?在关注 iOS 上的一些斯坦福大学 类 视频时,他们建议始终对属性使用点表示法。但你可以同时使用两者,对吧?所以我需要理解和建立坚实的基础。谢谢!
id x = self.moods
=> getter 等于 id x = [self moods]
self.moods = array
=> setter 等于 [self setMoods:newArray]
访问项目:
self.moods[index]
或 [self moods][index]
好的,这是我的简单 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!"];
}
我的问题是关于使用属性的 setter 和 getter 方法的混淆行为。为了进一步澄清,我不知道为什么 setter 方法的 .(dot) 符号有效而括号样式无效。
比如在这个方法下
-(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 forKey。
好吧,我承认我对此还很陌生,正在努力自学。上周我尝试学习 Objective-C 并尽力而为,并在那里涵盖了所有这些概念。但这是我在 iOS 编程的第二天,我发现这些小东西很难掌握。
能否请您帮助和详细指导一下?在关注 iOS 上的一些斯坦福大学 类 视频时,他们建议始终对属性使用点表示法。但你可以同时使用两者,对吧?所以我需要理解和建立坚实的基础。谢谢!
id x = self.moods
=> getter 等于 id x = [self moods]
self.moods = array
=> setter 等于 [self setMoods:newArray]
访问项目:
self.moods[index]
或 [self moods][index]