繁体   English   中英

Objective-C字符串数组

[英]Objective-C string arrays

我有这样一个字符串数组:

NSArray *names;
names = [NSArray arrayWithObjects:
@"FirstList",
@"SecondList",
@"ThirdList",
  nil];     

我正在尝试将此字符串数组的元素分配给这样的字符串变量:

NSString *fileName = names[0]; // "Incompatible types in initialization"

或铸造

NSString *fileName = (NSString)names[0]; // "Conversion to non-scalar type requested"

我正在尝试执行此操作,因此我可以在将字符串作为参数的方法中使用字符串,例如:

NSString *plistPath = [bundle pathForResource:filetName ofType:@"plist"];

没有办法将字符串数组的元素分配给字符串变量吗?

从2014年起更新:由于已为框架和编译器添加了特殊的语法支持以对诸如names[0]类的NSArray进行索引,因此本文中的代码实际上已经可以使用。 但是在问这个问题时,它给出了这个问题中提到的错误。

您不使用C数组符号来访问NSArray对象。 在第一个示例中使用-objectAtIndex:方法:

NSString *fileName = [names objectAtIndex:0];

这样做的原因是NSArray不是“ Objective-C的一部分”。 这只是Cocoa提供的类,就像您可以编写的任何类一样,并且没有特殊的语法特权。

NSArray是与C数组不同的专用数组类。 要引用其内容,请向其发送一个objectAtIndex:消息:

NSString *fileName = [names objectAtIndex:0];

如果要执行显式转换,则需要转换为NSString *指针,而不是NSString

NSString *fileName = (NSString *)[names objectAtIndex:0];

通过新的Objective-C文字可以使用:

NSString *fileName = names[0];


因此您的代码可能如下所示:

- (void)test5518658
{

 NSArray *names  = @[
         @"FirstList",
         @"SecondList",
         @"ThirdList"];

 NSString *fileName = names[0];

 XCTAssertEqual(@"FirstList", fileName, @"Names doesn't match ");

}

检查对象下标以获取更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM