我对 Swift 还算陌生。 我有一些方法在几个类中以相同的方式显示,但只是类型不同。它看起来像这样:
class func loadDevice() -> Device
{
let object = super.loadFromDisk()
if object != nil
{
return object! as! Device
}
else
{
return Device.init()
}
}
class func loadUser() -> User
{
let object = super.loadFromDisk()
if object != nil
{
return object! as! User
}
else
{
return User.init()
}
}
正如你所看到的,这两种方法是相同的。但我必须在每个类中编写它们,但类型不同。
是否可以编写一个“动态”静态(或非静态)方法,在一个地方执行此操作,而无需在每个类中一次又一次地编写此方法?
最佳答案
您需要的工具是Self
。
class Thing {
class func loadFromDisk() -> Self? {
// Do something to load from disk, or return nil if you can't
// subclasses can override this if appropriate
return nil
}
class func create() -> Self {
// Try to load it from disk, but if we can't, create one
return loadFromDisk() ?? self.init()
}
required init() {}
}
class User: Thing {}
init
方法被标记为required
,以强制每个子类以某种方式实现它。不过如果是遗传的话就好了。请记住,如果您创建自定义指定初始值设定项,那么您将丢失所有继承的初始值设定项,因为它们不再有效(它们不会调用您的指定初始值设定项,您说这是强制性的;这就是“指定初始值设定项”)。 required
确保我们依赖的初始值设定项确实存在并且不会因此丢失。
关于ios - Swift - 通过动态类型加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42191524/