Swift - 强制派生类来实现静态方法

时间:2016-01-20 06:41:34

标签: swift static abstract

我想强制从我的基类派生的所有类必须实现静态变量,而不强制每个派生类实现协议。

以下是一个示例:

enum SomeEnum {
    case BaseType
    case DerivedType
}

protocol Typed {
    static var classType: SomeEnum { get }
}

class BaseClass : Typed {
    static var classType: SomeEnum = SomeEnum.BaseType
}

class DerivedClass : BaseClass {
    // ERROR: Cannot override with a stored property 'classType'
    static var classType: SomeEnum = SomeEnum.DerivedType
}

下面的代码可以使用,但要求从BaseClass派生的每个类的实现者都要记住也从协议Typed派生,这也意味着BaseClass本身无法定义{ {1}}:

classType

下面这个例子也没有用,我得到了一个不同的错误:

class BaseClass {
}

class DerivedClass : BaseClass, Typed {
    static var classType: SomeEnum = SomeEnum.DerivedType
}

2 个答案:

答案 0 :(得分:0)

这是一个继承问题。在继承中,子类不能声明变量名称Equals基类变量名。这是因为子类将从基类中获取所有公共方法和变量,因此您无法执行此操作。获取子类的新变量。

看起来像这样:

class DerivedClass : BaseClass {
    static var newclassType : SomeEnum = SomeEnum.DerivedType
}

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html

答案 1 :(得分:0)

变量不能由子类重新定义(它已经存在)。它应该在初始化期间设置。

protocol Typed {
    var classType: SomeEnum { get }
}

class BaseClass : Typed {
    var classType: SomeEnum = SomeEnum.BaseType
}

class DerivedClass : BaseClass {
    override init() {
        super.init()
        classType = SomeEnum.DerivedType
    }
}

据我所知,在Swift(或Objective-C)中,类不可能强制其子类重新定义方法或设置属性。