Objective-C字符串数组
我有一个字符串数组:Objective-C字符串数组,objective-c,arrays,ios,Objective C,Arrays,Ios,我有一个字符串数组: NSArray *names; names = [NSArray arrayWithObjects: @"FirstList", @"SecondList", @"ThirdList", nil]; 我试图将此字符串数组的一个元素分配给字符串变量,如下所示: NSString *fileName = names[0]; // "Incompatible types in initialization" 还是用铸造 NSString *fileName =
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年的更新:这篇文章中的代码实际上可以在最近使用,因为框架和编译器中添加了特殊的语法支持,用于索引Nsarray,如
names[0]
。但是在提出这个问题时,它给出了这个问题中提到的错误。您不使用C数组表示法来访问NSArray对象。对于第一个示例,请使用-objectAtIndex:方法:
NSString *fileName = [names objectAtIndex:0];
原因是NSArray不是“Objective-C的一部分”。它只是Cocoa提供的一个类,与您可以编写的任何类一样,没有特殊的语法特权。您不使用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];
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 ");
}
查看更多信息。对于新的Objective-C文本,可以使用:
NSString *fileName = names[0];
因此,您的代码可以如下所示:
- (void)test5518658
{
NSArray *names = @[
@"FirstList",
@"SecondList",
@"ThirdList"];
NSString *fileName = names[0];
XCTAssertEqual(@"FirstList", fileName, @"Names doesn't match ");
}
查看更多信息。谢谢鲶鱼。如果不是COOTA?ObjultC,“ObjultC”的意思是什么,那么它是一种语言,比如C++或java。Cocoa是一个库,就像.NET或STL一样。Cocoa是用Objective-C编写的,可以在Objective-C代码中使用,但它与Objective-C不一样。此外,由于Objective-C不提供运算符重载,Cocoa的集合类不能像STL的std::vector(例如)那样提供[]支持。谢谢Catfish_-Man。如果不是COOTA?ObjultC,“ObjultC”的意思是什么,那么它是一种语言,比如C++或java。Cocoa是一个库,就像.NET或STL一样。Cocoa是用Objective-C编写的,可以在Objective-C代码中使用,但它与Objective-C不一样。此外,由于Objective-C不提供运算符重载,Cocoa的集合类不能像STL的std::vector(例如)那样提供[]支持。