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