Swift - 强制派生 类 以实现静态方法
Swift - Force derived classes to implement static method
我想强制所有从我的基础 class 派生的 classes 必须实现一个静态变量,而不是强制每个派生的 class 实现一个协议。
这是一个示例:
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
派生的每个 class 的实现者记住也要从协议 Typed
派生,这也意味着 [=15] =]本身不能定义classType
:
class BaseClass {
}
class DerivedClass : BaseClass, Typed {
static var classType: SomeEnum = SomeEnum.DerivedType
}
下面的这个例子也不起作用,我得到了一个不同的错误:
class BaseClass {
static var classType: SomeEnum {
get { return SomeEnum.BaseType }
}
}
class DerivedClass : BaseClass {
// ERROR: Class var overrides 'final' class var
static var classType: SomeEnum {
get { return SomeEnum.DerivedType }
}
}
这是一道继承题。在继承中子class不能声明变量名等于基class变量名。这是因为 sub class 将从 base class 获取所有 public 方法和变量,所以你不能这样做。为子 class.
获取一个新变量
看起来像这样:
class DerivedClass : BaseClass {
static var newclassType : SomeEnum = SomeEnum.DerivedType
}
子class 无法重新定义变量(它已经存在)。它应该在初始化期间设置。
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)中,class不可能强制其子class重新定义方法或设置一个 属性.
我想强制所有从我的基础 class 派生的 classes 必须实现一个静态变量,而不是强制每个派生的 class 实现一个协议。
这是一个示例:
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
派生的每个 class 的实现者记住也要从协议 Typed
派生,这也意味着 [=15] =]本身不能定义classType
:
class BaseClass {
}
class DerivedClass : BaseClass, Typed {
static var classType: SomeEnum = SomeEnum.DerivedType
}
下面的这个例子也不起作用,我得到了一个不同的错误:
class BaseClass {
static var classType: SomeEnum {
get { return SomeEnum.BaseType }
}
}
class DerivedClass : BaseClass {
// ERROR: Class var overrides 'final' class var
static var classType: SomeEnum {
get { return SomeEnum.DerivedType }
}
}
这是一道继承题。在继承中子class不能声明变量名等于基class变量名。这是因为 sub class 将从 base class 获取所有 public 方法和变量,所以你不能这样做。为子 class.
获取一个新变量看起来像这样:
class DerivedClass : BaseClass {
static var newclassType : SomeEnum = SomeEnum.DerivedType
}
子class 无法重新定义变量(它已经存在)。它应该在初始化期间设置。
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)中,class不可能强制其子class重新定义方法或设置一个 属性.