如何在NSArray中存储多类型数据?

Muh*_*qas 2 iphone objective-c nsarray ios7

NSArray *pets = [NSArray arrayWithObjects:@"Cat", @"Dog", @"Rat", nil];
Run Code Online (Sandbox Code Playgroud)

//如何在@"Rat"对象之后将int值456存储在此数组中,+ pet的类型为NSString,因此它不会在while循环中生成错误... ??? 那么我应该使用哪种数据类型来表示可以表示所有nextObject值/对象的宠物指针

NSEnumerator *enumerator = [pets objectEnumerator];
NSString *pet;

while (pet = [enumerator nextObject]) {
NSLog(@"Pet: %@", pet);
}
Run Code Online (Sandbox Code Playgroud)

rck*_*nes 5

由于NSArray只保存对象而无法添加整数,因此需要将其包装在一个NSNumber.

NSArray *pets = @[@"Cat", @"Dog", @"Rat", @456];
Run Code Online (Sandbox Code Playgroud)

这将适用于您的示例中的循环,但如果要调用任何NSString方法,则需要检查类型:

for(id pet in pets) {

  if(![pet isKindOfClass:[NSString class]) {
     // It not a string, just continue to the next object. 
     continue;
  }
}
Run Code Online (Sandbox Code Playgroud)

或者一个循环:

id pet;
NSEnumerator *enumerator = [pets objectEnumerator];
while (pet = [enumerator nextObject]) {
   if(![pet isKindOfClass:[NSString class]) {
      // It not a string, just continue to the next object. 
      continue;
   }
}
Run Code Online (Sandbox Code Playgroud)