如何在超类中创建一个方法创建子类对象?

bog*_*gen 3 inheritance swift

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


class RacingCar : Car {

}

let racingCar = RacingCar()
let upgradedRacingCar = racingCar.upgrade()
// ideally upgradedRacingCar should be a RacingCar
Run Code Online (Sandbox Code Playgroud)

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

mat*_*att 5

像这样.如果是类方法:

class Car {
    class func upgrade() -> Self { 
        return self()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果是实例方法:

class Car {
    func upgrade() -> Self { 
        return self.dynamicType()
    }
}
Run Code Online (Sandbox Code Playgroud)

返回类型Self意味着"我的类,多态".所以如果这是Car和RacingCar,我们会返回一辆Car,如果这是RacingCar的话.符号self(),self.dynamicType()是呼唤的简写init; 这些都是类,所以这是合法的.我认为你会有一个更精细的初始化器.你必须让你的初始化程序required来平息编译器的恐惧(正如我在这里解释的); 因此,除非在Car中init()标记required,否则上述任何一个都不会编译.