ios - Swift - 通过动态类型加载类

标签 ios swift class

我对 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/

相关文章:

iphone - 如何在 MKMapView iphone 中显示当前位置的蓝色圆圈

swift - 使用 GCD 在 Swift 中创建串行队列的问题

Swift:如何在 UICollectionView 单元格内嵌套具有不同表行数的 UITableView?

swift - 通过 Swift 访问 HTTPS URL 时出现错误 -9807

java - 我可以将对象构造函数存储到数组或哈希表中吗?

c++ - 如何将用户输入存储在与默认构造函数中的变量初始化值不同的变量中?

ios - UIImageView 动画的动画帧图像

ios - 大导航栏标题上方的字幕

ios - 嵌套的 AVPlayer 全屏?

Python 类变量更改未保存