gpt4 book ai didi

swift - 自动初始化器继承的条件是初始化器的签名

转载 作者:行者123 更新时间:2023-11-28 12:45:46 27 4
gpt4 key购买 nike

Food 类是RecipeIngredient 的父类(super class)。

Food 类引入了一个名为 name 的变量和一个指定初始化器 init(name: String) 和一个便利初始化器 init( );

RecipeIngredient 类引入了一个名为 quantity 的新变量和一个指定初始化器 init(name: String, quantity: Int) 和一个便利初始化器初始化(名称:字符串)

class Food {
var name: String
init(name: String) {
self.name = name
}
convenience init() {
self.init(name: "[Unnamed]")
}
}

class RecipeIngredient: Food {
var quantity: Int
init(name: String, quantity: Int) {
self.quantity = quantity
super.init(name: name)
}
override convenience init(name: String) {
self.init(name: name, quantity: 1)
}
}

let oneMysteryItem = RecipeIngredient()
print("\(oneMysteryItem.name), \(oneMysteryItem.quantity)")//--> [Unnamed], 1

引自office document

Even though RecipeIngredient provides the init(name: String) initializer as a convenience initializer, RecipeIngredient has nonetheless provided an implementation of all of its superclass’s designated initializers. Therefore, RecipeIngredient automatically inherits all of its superclass’s convenience initializers too.

问题 1:子类 RecipeIngredient 的便利构造器和父类(super class) Food 的指定构造器具有相同的签名,也就是。 初始化(名称:字符串)。但它们是完全不同的初始化器!所以,我是不是可以说,只要子类中有一个构造器与父类(super class)具有相同的签名,就可以认为子类提供了父类(super class)指定构造器的蕴含

问题 2:由于 RecipeIngredient 类继承了 Food 类的便利初始值设定项。 let oneMysteryItem = RecipeIngredient() 有效。但是print("\(oneMysteryItem.name),\(oneMysteryItem.quantity)")打印[Unnamed], 1,我真的不明白这个1是怎么来的从!发生了什么?固有的便利初始化器只定义了如何初始化固有值name,这个quantity == 1是怎么定义的?

最佳答案

问题一:

规则是,如果一个子类有任何指定的初始化器,并且还覆盖了它父类(super class)的所有指定初始化器(在子类中将它们标记为指定的或方便的),则继承父类(super class)的便利初始化器。

问题二:

RecipeIngredient 为其父类(super class)的唯一指定初始化器(即 init(name: String))提供了一个重写的初始化器,因此所有便利初始化器都被继承(即,在本例中只是 init())。调用 RecipeIngredient() 会调用 init() 便利初始化程序,后者又会调用子类上的 init(name: "[Unnamed]"),依次调用 init(name: "[Unnamed]", quantity: 1),子类的指定初始化器

关于swift - 自动初始化器继承的条件是初始化器的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191994/

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