objective-c – 通过引用传递布尔值

前端之家收集整理的这篇文章主要介绍了objective-c – 通过引用传递布尔值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在目标c中是否可以通过引用传递布尔值?我有许多布尔属性需要管理,所以我想将这些值的切换封装到一个函数中,我可以从每个按钮单击事件中调用它.这是一个例子:
@interface MyViewController()
@property (nonatomic) BOOL *sendEmails;
@end

然后在UIButton点击事件中,我有这个方法调用

[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名称必须具有_前缀或不具有取决于如何您的属性已声明.或者只使用局部变量,并根据需要将属性值复制到其中.)

猜你在找的C&C++相关文章