在目标C中不允许这种格式吗?
NSMutableArray arrayA=[0,1,2,3,4,5];
是一次添加一个整数来做到这一点的唯一方法吗?
这个问题有两个部分:
整数是值类型,NSMutableArray 中只能包含对象类型。
正如另一条评论所说,有一种神奇的语法:
@1
它说"我知道这是一个原始的,但请哦,强大的编译器自动神奇地让它成为我的对象。
同样,有以下语法:
@[ ... ]
它将C数组转换为Objective-C NSArray [子类]。
所以你可以这样做:
NSArray * array = @[ @1 , @2 , @3 , ... ] ;
这会给你一个数字数组。不过,您必须这样做才能使用它们:
for ( NSNumber * number in array )
{
NSLog ( @"This value is %i" , (int)number.intValue ) ;
// Alternatively, which does the exact same thing:
NSLog ( @"This value is %i" , (int)[number intValue] ) ;
}
如果要使其可变:
NSMutableArray * array = [ @[@1,@2,@3] mutableCopy ] ;
其他语言(如 Python)具有您想要内置的语法,因为它们是它们自己的语言,可以在内部将任何内容表示为对象类型或值类型。他们不必区分它们,并且根据可优化性付出代价。
Objective-C基于C,仍然必须符合C。此外,语法仍然必须符合 C,数字和 [] 标记在 C 和 C++ 中具有特定的含义,因此它们不能只是重新定义它们。因此,他们使用了他们最喜欢的语法:"@"符号,在字符串之后进行图案化。
char const * str = "abc" ;
NSString * str = @"abc" ;
int i = 1 ;
NSNumber * i = @1 ;
int arr[] = { 1 , 2 , 3 } ;
NSArray * arr = @[ @1 , @2 , @3 ] ;
// note: there's no concept of a dictionary in C
NSDictionary * dict = @{ @"a":@1 , @"b":@2 } ;
这通常称为"装箱",因为您将基元装箱到对象中。
请注意,数字的内部部分不一定是文字:
int i = 5 ;
NSNumber * ii = @(i) ;
char const* str = "abc" ;
NSString * string = @(str) ;
有关详细信息,请参阅以下内容:http://clang.llvm.org/docs/ObjectiveCLiterals.html
你不能这样做,因为整数是基元,NSArray
和NSMutableArray
不能存储基元。您可以使用创建 NSNumber
s 的文本语法来执行此操作:
NSMutableArray *arrayA=[@[@0,@1,@2,@3,@4,@5] mutableCopy];
由于数组中的值是 NSNumber
s,因此如果您想通过调用整数来获取整数,则需要解开它们intValue
。