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