objective-c将超类替换为类

objective-c将超类替换为类,objective-c,Objective C,是否可以在objective-c中执行类似操作(使用类别或类似内容): (伪代码) 一种解决方案是将Node作为元素的成员变量,但接下来我必须为Node类编写所有包装器函数。有可能以某种方式扩展它吗 谢谢 这以前是可能的,但是必要的函数(class_setSuperclass)很久以前就被弃用了,不能再使用了(这可能是件好事) 有两种不同的方法可以做到这一点,有些比另一些好 我认为最好的方法是创建一个新的元素子类,名为SpriteElement,它有一个Sprite成员变量,然后将所有相关的Sp

是否可以在objective-c中执行类似操作(使用类别或类似内容): (伪代码)

一种解决方案是将Node作为元素的成员变量,但接下来我必须为Node类编写所有包装器函数。有可能以某种方式扩展它吗


谢谢

这以前是可能的,但是必要的函数(
class_setSuperclass
)很久以前就被弃用了,不能再使用了(这可能是件好事)

有两种不同的方法可以做到这一点,有些比另一些好

我认为最好的方法是创建一个新的
元素
子类,名为
SpriteElement
,它有一个
Sprite
成员变量,然后将所有相关的Sprite ly方法转发给内部
Sprite
实例

您还可以定义一个新的协议,该协议捕获您想要的有关
精灵的所有内容,如下所示:

@protocol Sprite <NSObject>

- (void)doSpritelyThing;

@end
他们实现了如下方法:

@implement Element (Sprite)

- (void)doSpritelyThing {
  ...
}

@end
您可能还希望声明
Sprite
类符合
Sprite
协议:

@interface Element (Sprite) <Sprite>

@end
@interface Sprite () <Sprite>

@end
@接口精灵()
@结束
然后在代码中,不要将变量声明为type
Element*
,而是将它们声明为
id
(任何理解
协议消息的对象)



如果您可以灵活地使用
元素
作为与
精灵
不同的实例,那么第一种方法就可以了。如果不能,那么第二种方法也很有效。

这以前是可能的,但是必要的函数(
class\u setSuperclass
)很久以前就被弃用了,不能再使用了(这可能是件好事)

有两种不同的方法可以做到这一点,有些比另一些好

我认为最好的方法是创建一个新的
元素
子类,名为
SpriteElement
,它有一个
Sprite
成员变量,然后将所有相关的Sprite ly方法转发给内部
Sprite
实例

您还可以定义一个新的协议,该协议捕获您想要的有关
精灵的所有内容,如下所示:

@protocol Sprite <NSObject>

- (void)doSpritelyThing;

@end
他们实现了如下方法:

@implement Element (Sprite)

- (void)doSpritelyThing {
  ...
}

@end
您可能还希望声明
Sprite
类符合
Sprite
协议:

@interface Element (Sprite) <Sprite>

@end
@interface Sprite () <Sprite>

@end
@接口精灵()
@结束
然后在代码中,不要将变量声明为type
Element*
,而是将它们声明为
id
(任何理解
协议消息的对象)



如果您可以灵活地使用
元素
作为与
精灵
不同的实例,那么第一种方法就可以了。如果不能,那么第二种方法也很有效。

问题是Sprite和Node已经是一个接口,所以在这两种情况下我都需要编写包装函数。我将Node作为成员变量,问题就解决了。感谢+1只是为了“Sprity”。问题是Sprite和Node已经是一个接口,所以在这两种情况下我都需要编写包装函数。我将Node作为成员变量,问题就解决了。感谢+1只是为了“精神”