通过引用传递布尔值

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)....这可能吗?谢谢!

Hot*_*cks 2

可能更好地做:

@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 名称必须具有_或不具有前缀,具体取决于您的使用方式声明属性。或者仅使用局部变量,并根据需要将属性值复制到其中或从中复制出来。)