0

在c#中我可以声明object o;然后我可以分配o=(float)5.0;或者o="a string."Objective-C是否有等价物?我尝试使用id,但它不采用浮点或整数等原始类型。感谢您的帮助。

4

5 回答 5

12

用 CLR 的话来说,Objective-C 没有“统一类型系统”。换句话说,作为 C 的超集,Objective-C 的原始类型与对象实例完全不同。id类型可以存储对任何对象实例的引用(实际上是 OS X/iPhone Objective-C 运行时中的指针)。C 的原始类型(例如intfloat)必须包含在 type 中NSValueNSNumber分配给 type id。当然,这正是 C# 编译器正在做的事情。只是在 C# 中,您不必显式地进行(取消)装箱转换。

很快,代码就像

float val;
id obj = [NSNumber numberWithFloat:val];
...
float v = [obj floatValue];

将成为第二天性,如果不幸的是按照现代标准冗长。

于 2010-05-27T23:13:29.713 回答
3

真的没有这样的事。您可以使用NSNumberNSValue将本机数据类型作为对象来处理。 NSString会做字符串。您可以将所有这些分配给id类型化变量,但您需要使用正确的类的init方法来创建它们。

于 2010-05-27T22:58:23.913 回答
3

你是对的,id只适用于 ObjC 对象引用。如果要使用 id 引用来引用 int,则需要将其装箱到NSNumber. 顺便说一句,C# 也在装箱这些原语,它只是自动完成。

于 2010-05-27T22:58:47.267 回答
2

回到我的日子,我们不得不在雪地里走 15 英里,上坡,才能使用空指针。哦,我们没有 StackOverflow!

于 2010-05-27T23:20:00.190 回答
1

实际上,C# 数据类型只是它们各自类的别名,这就是它们可以分配给对象类型的原因。例如,int 实际上是一个名为 Int32 的类。

正如@Barry 前面提到的,Objective-C 并非如此。

于 2016-02-07T07:49:42.350 回答