我有这段代码,我需要复制&粘贴到许多类(我知道…),我正试图找到一种方法,不为每个新类编辑类名。我也希望我可以重构代码,而不用过多地考虑重命名类函数和调用初始化器。有办法吗?
@objc class MyClass : NSObject, NSCopying {
init() {}
func copyWithZone(zone: NSZone) -> AnyObject {
return MyClass()
}
class func myFunction() {}
func myMethod() {
MyClass.myFunction()
}
}
编辑:类是NSObject
子类,所以在这种情况下使用泛型不起作用。
与其将类的超类设置为NSObject
,不如将它们的超类设置为MyClass
,您可以这样定义:
@objc class MyClass : NSObject, NSCopying {
required override init() {
super.init()
}
func copyWithZone(zone: NSZone) -> AnyObject {
return self.dynamicType()
}
class func myFunction() {
// ...
}
func myMethod() {
self.dynamicType.myFunction()
}
}
dynamicType
是指实例的类。对于MyClass
的实例,dynamicType
是MyClass
。对于MyClass
的子类,dynamicType
将引用该子类。
关于required
初始化器和dynamicType
的解释,请看在Swift中使用子类实现NSCopying