加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:06:27 所属栏目:百科 来源:网络整理
导读:在目标c中是否可以通过引用传递布尔值?我有许多布尔属性需要管理,所以我想将这些值的切换封装到一个函数中,我可以从每个按钮单击事件中调用它.这是一个例子: @interface MyViewController()@property (nonatomic) BOOL *sendEmails;@end 然后在UIButton点
在目标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名称必须具有_前缀或不具有取决于如何您的属性已声明.或者只使用局部变量,并根据需要将属性值复制到其中.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读