And*_*Dev 5 boolean objective-c pass-by-reference
在目标c中是否可以通过引用传递布尔值?我有许多布尔属性需要管理,所以我想将这些值的切换封装到一个函数中,我可以从每个按钮单击事件中调用它.这是一个例子:
@interface MyViewController()
@property (nonatomic) BOOL *sendEmails;
@end
Run Code Online (Sandbox Code Playgroud)
然后在UIButton点击事件中,我有这个方法调用:
[self updateEmailPreference:self.sendEmails button:self.noEmailsCheckBox];
Run Code Online (Sandbox Code Playgroud)
哪个调用此方法:
- (void) updateEmailPreference : (BOOL *) b
button : (UIButton *) button
{
if (*b) {*b = NO;}
else {*b = YES;}
if (*b) {
[button setBackgroundImage:[UIImage imageNamed:@"checked_checkbox"] forState:UIControlStateNormal];
} else {
[button setBackgroundImage:[UIImage imageNamed:@"unchecked_checkbox"] forState:UIControlStateNormal];
}
}
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这个崩溃了if (*b)....这可能吗?谢谢!
可能更好地做:
@interface MyViewController()
@property (nonatomic) BOOL sendEmails;
@end
Run Code Online (Sandbox Code Playgroud)
对于方法调用:
[self updateEmailPreference:&(self ->_sendEmails) button:self.noEmailsCheckBox];
Run Code Online (Sandbox Code Playgroud)
方法仍然是:
- (void) updateEmailPreference : (BOOL *) b
button : (UIButton *) button
{
if (*b) {*b = NO;}
else {*b = YES;}
if (*b) {
[button setBackgroundImage:[UIImage imageNamed:@"checked_checkbox"] forState:UIControlStateNormal];
} else {
[button setBackgroundImage:[UIImage imageNamed:@"unchecked_checkbox"] forState:UIControlStateNormal];
}
}
Run Code Online (Sandbox Code Playgroud)
(请注意,在调用语句中使用的变量可能会产生混淆。如果它是一个属性,则必须使用 ivar 引用而不是点限定属性,并且 ivar 名称必须具有_或不具有前缀,具体取决于您的使用方式声明属性。或者仅使用局部变量,并根据需要将属性值复制到其中或从中复制出来。)
| 归档时间: |
|
| 查看次数: |
4334 次 |
| 最近记录: |