首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift 5使用必需的init从超级派生子类化

Swift 5使用必需的init从超级派生子类化
EN

Stack Overflow用户
提问于 2019-06-10 00:15:57
回答 1查看 62关注 0票数 0

我正在通过Swift apprentice第三版工作。

这本书快速跳过了所需的初始化器。

如果我有一个超类:

代码语言:javascript
复制
class Animal {
    let animalType: String

    required init(animalType: String) {
        self.animalType = animalType
    }

    convenience init(animal: Animal) {
        self.init(animalType: animal.animalType)
    }
}

然后是像这样的子类:

代码语言:javascript
复制
class WildAnimal: Animal {
    let name: String

    required init(animalType: String) {
        name = ""
        super.init(animalType: animalType)
    }
}

初始化子类的唯一方法是在所需的init中分配占位符的值。也就是说,我必须把name = "“。

如果父类有一个必需的初始化,那么在初始化过程中有没有办法初始化子类的参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 00:32:39

您可以有多个初始值设定项。您还需要“覆盖”所需的父初始值设定项。

代码语言:javascript
复制
class WildAnimal: Animal {
    var name: String

    required init(animalType: String) {
        name = ""
        super.init(animalType: animalType)
    }

    init(animalType: String, name: String) {
        self.name = name
        super.init(animalType: animalType)
    }
}

强制子类定义de required初始化器是required的意义所在。

在定义类初始值设定项之前编写所需的修饰符,以指示类的每个子类都必须实现该初始值设定项

Source

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56516275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档