我有这个代码我需要复制&粘贴到很多类(我知道......),我试图找到一种不为每个新类编辑类名的方法。如果我可以重构代码而不考虑重命名类func和调用初始化器,我也会更喜欢。有办法吗?
@objc class MyClass : NSObject, NSCopying {
init() {}
func copyWithZone(zone: NSZone) -> AnyObject {
return MyClass()
}
class func myFunction() {}
func myMethod() {
MyClass.myFunction()
}
}
修改
这些类是NSObject
子类,因此在这种情况下使用泛型将不起作用。
答案 0 :(得分:1)
而不是让你的班级'超类为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
的解释,请查看Implementing NSCopying in Swift with subclasses