Objective-C字符串数组

Nam*_*cir 1 arrays objective-c ios

我有一个字符串数组:

NSArray *names;
names = [NSArray arrayWithObjects:
@"FirstList",
@"SecondList",
@"ThirdList",
  nil];     
Run Code Online (Sandbox Code Playgroud)

我正在尝试将此字符串数组的元素分配给字符串变量,如下所示:

NSString *fileName = names[0]; // "Incompatible types in initialization"
Run Code Online (Sandbox Code Playgroud)

或铸造

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

我正在尝试这样做,所以我可以在一个以字符串作为参数的方法中使用该字符串,例如:

NSString *plistPath = [bundle pathForResource:filetName ofType:@"plist"];
Run Code Online (Sandbox Code Playgroud)

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

从2014年开始更新:这篇文章中的代码实际上可以使用,因为特殊的语法支持已添加到框架和编译器中,用于索引NSArrays等names[0].但在提出这个问题的时候,它给出了这个问题中提到的错误.

Cat*_*Man 8

您不使用C数组表示法来访问NSArray对象.使用-objectAtIndex:方法作为第一个示例:

NSString *fileName = [names objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

原因是NSArray不是"Objective-C的一部分".它只是一个由Cocoa提供的类,就像你可以编写的类一样,并且没有特殊的语法特权.

  • Objective-C是一种语言,如C++或Java.Cocoa是一个库,如.NET或STL.Cocoa是用Objective-C编写的,可以在Objective-C代码中使用,但它与Objective-C不同. (3认同)

Bol*_*ock 5

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

NSString *fileName = [names objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

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

NSString *fileName = (NSString *)[names objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)