sender.selected =! sender.selected在所选状态之间切换?

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

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

现在,它明显地切换发送动作的button的select和未select状态,但是什么是代码“sender.selected =!sender.isSelected”实际上是说? 它只是“将发件人select属性设置为getter的相反(即不!)”? 所以如果getter将当前选中的值设置为true,那么它将选中的属性设置为!true,即false。 或者这是一个我还不知道的便利代码? 因为似乎'!sender.isSelected'只是意味着没有被选中

 if (!sender.isSelected){ statement } 

即如果没有select发件人,则做声明。 这无疑是显而易见的,只是我现在有点困惑。

谢谢!

你是完全正确的,它调用getter来获取值,并用值的NOT( ! )来调用setter。 它不是Objective-C,它是简单的C语法。

它只是“将发件人select属性设置为getter的相反(即不!)”?

究竟。 那。

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

不,句法糖的唯一部分是获取者/设置者的点符号,但是您已经意识到了这一点。

代码的一部分:

 sender.selected = !sender.isSelected; 

基本上颠倒select。 它问这个问题Is this false? 所以真正的评估是假的,而假的评估是真的。 所以这是一个切换。

从文档:

 @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] – 将新的值设置为sender(selected property)。 然后运行getter发件人isSelected返回新值,我希望它有帮助