感觉像代码更少 - 更好代码所以想要“优化”如何同时启用多个项目:
button1.enabled = YES;
button2.enabled = YES;
textField.enabled = YES;
...使用此代码。但实际上做了什么?我相信启用button2状态将由设置textField启用状态的结果定义?如果textField案例由于未知原因而失败,那么button1将获得设置button2启用状态的操作结果吗?
至少在理论上textField.enabled可以是什么,button2.enabled NO和button1.enabled YES?!?!?
button1.enabled = button2.enabled = textField.enabled = YES;
可能出现什么问题?这根本安全吗?
答案 0 :(得分:3)
技巧是赋值也是C中的表达式。它的值是存储到赋值变量的值。换句话说,foo = 5
将5
分配给foo
,整个表达式的值为5
。
此功能会导致一些类似于您的快捷方式,最着名的快捷方式可能是while (*dst++ = *src++)
将以空字符结尾的字符串src
复制到dst
。在Objective-C中,您经常可以在初始化程序中看到该功能:
- (id) init {
if !(self = [super init]) // self = super init; self == nil?
return nil;
…
return self;
}
注意单=
,这不是错误。但是因为它可以成为错误的重要来源(当你真正意味着==
)时,现代编译器会经常警告这个任务,你必须将它包含在另一对括号中以保持沉默警告:if ((self = [super init]))
。
答案 1 :(得分:2)
是的,这很安全。您将在YES
之前将所有属性设置为=
。
如果我没有弄错,从右到左执行操作:
textField.enabled
将等于YES button2.enabled
将等于textField.enabled = YES;
YES
的结果
button1.enabled
将等于button2.enabled = YES;
,等于YES
(来自2))