Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C字符串数组_Objective C_Arrays_Ios - Fatal编程技术网

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(例如)那样提供[]支持。