在目标c中是否可以通过引用传递布尔值?我有许多布尔属性需要管理,所以我想将这些值的切换封装到一个函数中,我可以从每个按钮单击事件中调用它.这是一个例子:
@interface MyViewController() @property (nonatomic) BOOL *sendEmails; @end
[self updateEmailPreference:self.sendEmails button:self.noEmailsCheckBox];
- (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]; } }
但遗憾的是,这会在if(* b)…块上崩溃.这可能吗?谢谢!
解决方法
可能更好:
@interface MyViewController() @property (nonatomic) BOOL sendEmails; @end
[self updateEmailPreference:&(self ->_sendEmails) button:self.noEmailsCheckBox];
该方法仍然是:
- (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]; } }
(请注意,在call语句中使用的变量可能存在混淆.如果它是属性,则必须使用ivar引用而不是dot限定属性,并且ivar名称必须具有_前缀或不具有取决于如何您的属性已声明.或者只使用局部变量,并根据需要将属性值复制到其中.)