gpt4 book ai didi

ios - Swift - 按动态类型加载类

转载 作者:可可西里 更新时间:2023-11-01 00:57:32 26 4
gpt4 key购买 nike

我是 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()
}
}

如您所见,这两种方法是相同的。但我必须在每个类(class)中写它们,但类型不同。

是否可以编写一个“动态”静态(或非静态)方法,在一个地方执行此操作,而无需在每个类中一次又一次地编写此方法?

最佳答案

您在这里需要的工具是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/

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