不了解Objective c中的基本属性和方法

Jay*_*tel 2 oop objective-c

我是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];

}
Run Code Online (Sandbox Code Playgroud)

我在这里做的只是在选择选择器视图的某一行时更改背景颜色.

有人可以解释最后一行.

当我提到doc时,我发现view和setBackgroundColor属性.

我们通常称这样的方法

[Object someMethod];

那么我的概念在哪里出错?将赞赏一些相关概念的链接.

das*_*ght 5

最近,属性被添加到语言中(考虑到Objective-C已有三十多年的历史).无论您使用点语法表达什么,您还可以使用"旧式"方括号语法表达.例如,如果view是属性self,则这两种访问方式是等效的:

self.view
Run Code Online (Sandbox Code Playgroud)

[self view]
Run Code Online (Sandbox Code Playgroud)

因此,您的最后一行代码相当于

[self.view setBackgroundColor:color];
Run Code Online (Sandbox Code Playgroud)

设置属性也是如此,除非按照惯例set添加前缀和初始大小写以提出setter的名称.例如,如果调用该属性backgroundColor,则将调用settersetBackgroundColor:

因此,您可以像这样重写最后一行:

self.view.backgroundColor = color;
Run Code Online (Sandbox Code Playgroud)

  • Thanx很多.我想我明白了. (2认同)
  • 你能用Java之类的其他语言来比喻吗?非常感谢. (2认同)
  • @JayPatel Java中没有简洁的类比:Java Beans有关于getter和setter属性的约定,但是没有语言语法来支持它.换句话说,在Java中向类中添加`int getX()`和`void setX(int val)`确实*不允许你编写`myObj.x = 123`,因为需要显式调用getter和setter.但是,有一些工具可以"理解"这种约定(例如[NetBeans](http://wiki.netbeans.org/NetBeansJavaBeansTutorial)).其他工具也遵循这个约定 - 例如,hibernate可以识别getter和setter,并将它们视为一个属性. (2认同)