我知道 Apple 非常希望您使用 NS 对象而不是真正的原始类型,但我需要数组的功能(即直接访问索引处的项目)。然而,他们似乎非常热衷于使用 NS 对象,以至于我在网上或教科书中找不到关于如何使用基本原始数组的教程。 我想要一些能在 Java 中完成类似操作的东西:
String inventory[] = new String[45];
inventory[5] = "Pickaxe";
inventory[12] = "Dirt";
inventory[8] = "Cobblestone";
inventory[12] = null;
System.out.println("There are " + inventory.length + " slots in inventory: " + java.util.Arrays.toString(inventory));
以下是我在 Objective-C 中得到的最接近的结果,但它无法正常运行:
NSString *inventory[45];
inventory[5] = @"Pickaxe";
inventory[12] = @"Dirt";
inventory[8] = @"Cobblestone";
inventory[12] = nil;
NSArray *temp = [NSArray arrayWithObjects:inventory count:45];
NSLog(@"There are %i slots in inventory: %@", [temp count], [temp description]);
另外,如果可能的话,O-C 中是否有一些东西可以给我数组中非空/非零对象的计数? (这样,我可以知道库存中还剩下多少空间,这样玩家就无法在库存已满的情况下收拾任何东西)
最佳答案
通常,您会使用 NSArray
/NSMutableArray
,尽管您也可以使用 C 数组。
NSArray
(以及大多数 Foundation 集合)不能包含 nil
条目 - 如果需要 ,可以使用
值,或者简单地在 NSPointerArray
(OS X) nilNSArray
中使用 [NSNull null]
来指定 nil
。
这是使用 NSArray
的程序:
NSMutableArray * inventory = [NSMutableArray array];
for (NSUInteger idx = 0; idx < 45; ++idx) {
[inventory addObject:[NSNull null]];
}
[inventory replaceObjectAtIndex:5 withObject:@"Pickaxe"];
[inventory replaceObjectAtIndex:12 withObject:@"Dirt"];
[inventory replaceObjectAtIndex:8 withObject:@"Cobblestone"];
[inventory replaceObjectAtIndex:12 withObject:[NSNull null]];
NSArray *temp = [NSArray arrayWithObject:inventory];
NSLog(@"There are %i slots in inventory: %@", [temp count], [temp description]);
Also, if at all possible, is there something in O-C that will give me the count of non-null/non-nil objects in the array?
NSArray 是 CFArray - 它们是“免费桥接”。使用 CFArrayGetCountOfValue
和 [NSNull null]
作为要查找的值。大多数 CF-API 在 NS-API 中都可用,但这个不行。如果经常需要,您可以轻松地将其包装在一个类别中。
关于objective-c - C/Java/等。 Objective-C 中的样式数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005097/