来自Java,我正在写:
NSObject* obj[] = (NSObject* []) [self getResult];
编译器抱怨Cast to incomplete type 'NSObject *[]'
将对象转换为对象数组的正确方法是什么?
谢谢。
来自Java,我正在写:
NSObject* obj[] = (NSObject* []) [self getResult];
编译器抱怨Cast to incomplete type 'NSObject *[]'
将对象转换为对象数组的正确方法是什么?
谢谢。
鉴于您承认对语言和库的新颖性:您通常会使用集合类型,例如NSArray
. 同样,-getResult
将返回一个NSArray
.
另请注意,在 ObjC 中,类型转换实际上是将NSObject
类型指针作为另一种类型传递——没有隐式提升(正如您在 Java 中看到的那样)。如果您想将 an 向下转换NSObject
为 an NSArray
,则可以使用NSArray * array = (NSArray*)[self getResult];
. 同样,没有提升 - 如果结果是 an NSString
,那么您仍然在运行时处理 an NSString
。
Tommy 的回答 (+1) 演示了如何创建一个NSArray
包含一个元素的元素——另一种编写方式,它不依赖于最新的编译器功能是NSArray * array = [NSArray arrayWithObject:[self getResult]];
.
假设getResult
返回一个对象,而您想要的是一个对象数组,从 Xcode 4.4 开始,您可能会使用:
NSArray *objects = @[ [self getResult] ];
这将创建一个(不可变)数组,其中只包含一个对象——无论结果getResult
是什么。
在 Objective-C 中,数组可以包含任何对象;您不会创建数组来保存特定类型的对象。
您应该考虑使用内置的 Array 类。要么NSArray
或NSMutableArray