swift - Swift 5 从 super 子类化,需要初始化
问题描述
我正在阅读 Swift 学徒第 3 版。
本书快速跳过所需的初始化程序。
如果我有一个超级类:
class Animal {
let animalType: String
required init(animalType: String) {
self.animalType = animalType
}
convenience init(animal: Animal) {
self.init(animalType: animal.animalType)
}
}
然后子类如:
class WildAnimal: Animal {
let name: String
required init(animalType: String) {
name = ""
super.init(animalType: animalType)
}
}
我可以初始化子类的唯一方法是在所需的 init 中分配占位符值。即我必须输入名称=“”。
如果父类具有必需的 init,是否无法在初始化期间初始化子类参数?
解决方案
你可以有多个初始化器。您还必须“覆盖”所需的父初始值设定项。
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)
}
}
强制子类定义 derequired
初始化器是required
.
在类初始化器的定义之前写 required 修饰符,表示该类的每个子类都必须实现该初始化器
推荐阅读
- javascript - 我们如何在 Typescript、Angular 中比较超过 2 个或多个数组?
- mongodb - MongoDB Aggregate - 在一个管道中获取总计数并跳过
- javascript - javascript使递归数组遍历并更新一些内部值(指针)
- javascript - 全局执行上下文是否与 JavaScript 中的全局对象相同?
- python - 每当分类熊猫时间序列改变状态时如何提取时间戳
- java - 如何在改造时同时提出 2 个请求?
- sql - 使用不使用我的索引的连接优化查询
- python - 防止在 SymPy 中评估指数
- javascript - 如何向 Google Places Autocomplete 添加位置偏差:Javascript API
- ruby-on-rails - 将 Rails 应用程序部署到 Heroku 时出错,捆绑错误