在c#中我可以声明object o;
然后我可以分配o=(float)5.0;
或o="a string."
是否有与Objective-C等效的内容?我尝试使用id
,但它不采用原始类型,如float或integer。谢谢你的帮助。
答案 0 :(得分:11)
Objective-C在CLR的单词中没有“统一类型系统”。换句话说,作为C的超集,Objective-C的原始类型与对象实例完全是不同的野兽。 id
类型可以将引用(OS X / iPhone Objective-C运行时中的指针)存储到任何对象实例。 C的原始类型(例如int
,float
等)必须包含在NSValue
或NSNumber
中以分配给类型id
。当然,这正是C#编译器正在做的事情。只是在C#中,你不必明确地进行(un)拳击转换。
很快,代码就像
float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];
如果不幸的是,按照现代标准,将成为第二天性。
答案 1 :(得分:3)
实际上没有这样的事情。您可以使用NSNumber
或NSValue
将本机数据类型作为对象进行处理。 NSString
会做字符串。您可以将所有这些分配给id
类型的变量,但您需要使用正确的类init
方法创建它们。
答案 2 :(得分:3)
你是对的,id
仅适用于ObjC对象引用。如果要引用带有id引用的int,则需要将其装入NSNumber
。顺便说一句,C#也是这些原语,它只是自动完成。
答案 3 :(得分:2)
在我的日子里,我们不得不在雪地上行走15英里,上坡,使用void pointers。哦,我们没有StackOverflow!
答案 4 :(得分:1)
实际上,C#数据类型只是它们各自类的别名,这就是它们可以分配给对象类型的原因。 例如,int实际上是一个名为Int32的类。
正如@Barry先前提到的,Objective-C的情况并非如此。