我想强制从我的基类派生的所有类必须实现静态变量,而不强制每个派生类实现协议。
以下是一个示例:
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
}
答案 0 :(得分:0)
这是一个继承问题。在继承中,子类不能声明变量名称Equals基类变量名。这是因为子类将从基类中获取所有公共方法和变量,因此您无法执行此操作。获取子类的新变量。
看起来像这样:
class DerivedClass : BaseClass {
static var newclassType : SomeEnum = SomeEnum.DerivedType
}
答案 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)中,类不可能强制其子类重新定义方法或设置属性。