如何引用类类型来在同一个类中调用构造函数或其他类函数?

时间:2015-06-07 05:16:56

标签: ios swift

我有这个代码我需要复制&粘贴到很多类(我知道......),我试图找到一种不为每个新类编辑类名的方法。如果我可以重构代码而不考虑重命名类func和调用初始化器,我也会更喜欢。有办法吗?

@objc class MyClass : NSObject, NSCopying {
    init() {}

    func copyWithZone(zone: NSZone) -> AnyObject {
       return MyClass()
    }

   class func myFunction() {}

   func myMethod() {
       MyClass.myFunction()
   }
}

修改

这些类是NSObject子类,因此在这种情况下使用泛型将不起作用。

1 个答案:

答案 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的实例,dynamicTypeMyClass。对于MyClass的子类,dynamicType将引用该子类。

有关required初始化者和dynamicType的解释,请查看Implementing NSCopying in Swift with subclasses