1

我对 Objective-C 很陌生,如果这对你们中的许多人来说非常明显,我很抱歉,但我正在尝试弄清楚以下代码实际上是如何工作的:

- (IBAction)chooseColour:(UIButton *)sender {
 sender.selected = !sender.isSelected;
}

现在它显然在发送动作的按钮的选中和未选中状态之间切换,但是代码'sender.selected = !sender.isSelected'实际上是在说什么?它只是'将发送者选择的属性设置为吸气剂的相反(即!不是)'?因此,如果 getter 将当前选定的值“获取”为 true,那么它将选定的属性设置为 !true,即 false。或者这是我还不知道的一段便利代码?因为看起来 '!sender.isSelected' 只是意味着没有被选中,如

if (!sender.isSelected){
statement
}

即如果未选择发件人,则执行声明。毫无疑问,这很明显,只是我现在有点困惑。

谢谢!

4

4 回答 4

2

You are entirely correct, it's calling the getter to obtain the value and calling the setter with the NOT (!) of the value. It isn't Objective-C, it's plain C syntax.

于 2013-08-14T23:20:44.383 回答
1

它只是'将发送者选择的属性设置为吸气剂的相反(即!不是)'?

确切地。那。

或者这是我还不知道的一段便利代码?

不,唯一的语法糖是 getter/setter 的点符号,但你已经意识到了。

于 2013-08-14T23:23:26.550 回答
0

代码部分:

sender.selected = !sender.isSelected;

基本上反转选择。它提出这个问题Is this false?,所以 true 评估 false,false 评估为 true。所以这是一个切换。

于 2013-08-14T23:25:09.303 回答
0

来自文档:

@property(nonatomic,getter=isSelected) BOOL selected;                                // default is NO may be used by some subclasses or by application

//说明如果你使用 ![sender isSelected] 属性中的值没有改变。然后,如果您使用 setter sender.selected = ![sender isSelected] - 新值设置为发件人(选定属性)。然后运行 ​​getter sender isSelected 返回新值,希望它有帮助

于 2013-08-14T23:43:50.317 回答