gpt4 book ai didi

swift - 如何使父类(super class)中的方法创建子类对象?

转载 作者:搜寻专家 更新时间:2023-10-31 22:15:46 25 4
gpt4 key购买 nike

class Car {
func upgrade() -> Car {
return Car()
}
}


class RacingCar : Car {

}

let racingCar = RacingCar()
let upgradedRacingCar = racingCar.upgrade()
// ideally upgradedRacingCar should be a RacingCar

如果在子类上调用升级方法,如何创建 RacingCar 对象,没有在 RacingCar 中实现它?

最佳答案

像这样。如果是类方法:

class Car {
class func upgrade() -> Self {
return self()
}
}

如果是实例方法:

class Car {
func upgrade() -> Self {
return self.dynamicType()
}
}

返回类型Self 表示“我的类,多态的”。因此,如果这是 Car,我们返回 Car;如果这是 RacingCar,则返回 RacingCar。符号 self()self.dynamicType() 是调用 init 的简写;这些都是类,所以这是合法的。我想你会有一个更复杂的初始化器。你将不得不让你的初始化器成为required来平息编译器的恐惧(正如我解释的here);因此,除非 init() 在 Car 中被标记为 required,否则以上两个都不会编译。

关于swift - 如何使父类(super class)中的方法创建子类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30246811/

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