gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:46:16 25 4
gpt4 key购买 nike

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

这是一个示例:

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 派生的每个类的实现者记住也从协议(protocol) Typed 派生,这也意味着 BaseClass本身无法定义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 }
}
}

最佳答案

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

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)中,类不可能强制其子类重新定义方法或设置属性。

关于Swift - 强制派生类实现静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34893150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com