当前位置:  开发笔记 > IOS > 正文

Objective C布尔数组

如何解决《ObjectiveC布尔数组》经验,为你挑选了4个好方法。

我需要在objective-c中使用一系列布尔值.我已经完成了它的设置,但编译器会在以下语句中发出警告:

[updated_users replaceObjectAtIndex:index withObject:YES];

这是,我敢肯定,因为YES根本不是一个对象; 这是一个原始的.无论如何,我需要这样做,并非常感谢如何实现它的建议.

谢谢.



1> Nick Partrid..:

是的,这正是它的原因:NS*容器只能存储Objective-C对象,而不是基本类型.

您应该能够通过将其包装在NSNumber中来完成您想要的任务:

[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]

或者通过使用@(YES)哪个包裹BOOL一个NSNumber

[updated_users replaceObjectAtIndex:index withObject:@(YES)]]

然后你可以拿出boolValue:

BOOL mine = [[updated_users objectAtIndex:index] boolValue];



2> Andrew Grant..:

假设您的数组包含有效对象(并且不是c样式数组):

#define kNSTrue         ((id) kCFBooleanTrue)
#define kNSFalse        ((id) kCFBooleanFalse)
#define NSBool(x)       ((x) ? kNSTrue : kNSFalse)

[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];


我很想知道为什么Nicks的答案得到了比这个更多的支持,因为这看起来更优雅.有人可以解释这个区别吗?

3> Georg Schöll..:

你可以存储NSNumbers:

[updated_users replaceObjectAtIndex:index
                         withObject:[NSNumber numberWithBool:YES]];

或根据您的需要使用C阵列:

BOOL array[100];
array[31] = YES;



4> Nicki..:

像Georg说的那样,使用C阵列.

BOOL myArray[10];

for (int i = 0; i < 10; i++){
  myArray[i] = NO;
}

if (myArray[2]){
   //do things;
}

Martijn,"myArray"是你使用的名字,在georg的例子中是"array".

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有