我是Objective C的新手,但对面向对象编程语言有一些了解。
我对以下代码有一点疑问:
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
UIColor *color;
switch (row) {
case 1:
color = [UIColor colorWithRed:1.0 green:0.85 blue:2/255.0 alpha:1.0];
break;
case 2:
color = [UIColor greenColor];
break;
case 3:
color = [UIColor darkGrayColor];
break;
default:
color = [UIColor whiteColor];
break;
}
[[self view] setBackgroundColor:color];
}
我在这里做的只是在选择了某个选择器视图行时更改背景颜色。
有人可以解释最后一行。
当我提到doc时,我发现view和setBackgroundColor属性。
我们通常会调用这样的方法
[Object someMethod];
那么我的概念在哪里出错?一些相关概念的链接将不胜感激。
答案 0 :(得分:5)
最近,属性被添加到语言中(考虑到Objective-C已有三十多年的历史)。无论您使用点语法表达什么,您还可以使用“旧式”方括号语法表达。例如,如果view
是self
的属性,则这两种访问方式是等效的:
self.view
和
[self view]
因此,您的最后一行代码等同于
[self.view setBackgroundColor:color];
设置属性也是如此,除非按照约定,set
前缀和初始大小写被添加以提供setter的名称。例如,如果属性被称为backgroundColor
,那么将设置setter setBackgroundColor:
因此,您可以像这样重写最后一行:
self.view.backgroundColor = color;
答案 1 :(得分:3)
您遇到问题的概念是什么?
self
是一个对象
[self view]
返回一个视图对象。
[[self view] setBackgroundColor:color];
可以重写:
UIView *aView = [self view];
[aView setBackgroundColor:color];