我需要将自定义对象转换为其他对象。我怎么能这样做?
我知道类型转换不起作用(唯一的问题是“关闭编译器警告”,但仅此而已)。以下是示例代码:
MyType* obj1;
MyOtherType* obj2;
obj1 = [MyType initWithData: 1];
obj2 = (MyOtherType*) obj1;
if ([obj2 isMemberOfClass: [MyOtherType class]]) { NSLog(@"OK"); }
else if ([obj2 isMemberOfClass: [MyType class]]) { NSLog(@"Nope"); }
结果是:
Nope
我该怎么办?
答案 0 :(得分:2)
类型转换(就像你正在做的那样)不会改变对象的类型。你实际在做的是:
obj1 = [MyType initWithData: 1];
“我刚刚创建了一个MyType类型的对象,现在指向它的obj1。因为obj1是一个MyType指针,所以没关系。”
如果你没有使用类型转换到下一行:
obj2 = obj1;
你说,“obj2指向同一件事obj1指向”,这将起作用,但编译器知道obj1是一个MyType指针而obj2是一个MyOtherType指针,所以它会抛出一个警告,告诉你它们是不兼容的。
所以当你说:
obj2 = (MyOtherType*) obj1;
所有你说的是,“obj2指向同一件事obj2指向,OH并将obj1视为MyOtherType对象”。这对编译器来说很酷,因为就它而言,它只是将MyOtherType分配给MyOtherType。但这实际上并没有改变obj1指向的对象。因此,当您将'isMemberOfClass'消息传递给obj1时,它仍然会报告它是MyType的成员。
您的问题的一个解决方案是编写自己的自定义初始化程序或转换器(类似这样):
- (id)initWithMyType:(MyType*)originalType;
然后在那里进行转换
答案 1 :(得分:0)
您可以逐个字段手动执行此操作。或者在MyType中创建一个手动执行该方法并返回MyOtherType。