objective-c将超类替换为类
是否可以在objective-c中执行类似操作(使用类别或类似内容): (伪代码) 一种解决方案是将Node作为元素的成员变量,但接下来我必须为Node类编写所有包装器函数。有可能以某种方式扩展它吗objective-c将超类替换为类,objective-c,Objective C,是否可以在objective-c中执行类似操作(使用类别或类似内容): (伪代码) 一种解决方案是将Node作为元素的成员变量,但接下来我必须为Node类编写所有包装器函数。有可能以某种方式扩展它吗 谢谢 这以前是可能的,但是必要的函数(class_setSuperclass)很久以前就被弃用了,不能再使用了(这可能是件好事) 有两种不同的方法可以做到这一点,有些比另一些好 我认为最好的方法是创建一个新的元素子类,名为SpriteElement,它有一个Sprite成员变量,然后将所有相关的Sp
谢谢 这以前是可能的,但是必要的函数(
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
@接口精灵()
@结束
然后在代码中,不要将变量声明为typeElement*
,而是将它们声明为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
@接口精灵()
@结束
然后在代码中,不要将变量声明为typeElement*
,而是将它们声明为id
(任何理解
协议消息的对象)
如果您可以灵活地使用元素
作为与精灵
不同的实例,那么第一种方法就可以了。如果不能,那么第二种方法也很有效。问题是Sprite和Node已经是一个接口,所以在这两种情况下我都需要编写包装函数。我将Node作为成员变量,问题就解决了。感谢+1只是为了“Sprity”。问题是Sprite和Node已经是一个接口,所以在这两种情况下我都需要编写包装函数。我将Node作为成员变量,问题就解决了。感谢+1只是为了“精神”