gpt4 book ai didi

ios - 在不同的 swift 文件中覆盖父类(super class)的默认初始化程序

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

我在 Vehicle.swift 中写了类 Vehicle 并在 Bicycle.swift 中的另一个类 Bicycle 中继承了它。但是 Xcode 6.1 报编译错误:initializer does not override a designated initializer from its superclass。车辆.swift:

import Foundation

public class Vehicle {
var numberOfWheels: Int?
var description: String {
return "\(numberOfWheels) wheel(s)"
}
}

自行车.swift:

import Foundation

public class Bicycle: Vehicle {
override init() {
super.init()
numberOfWheels = 2
}
}

这些代码来自 Apple iOS Developer Library。链接:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_324

当在同一个 .swift 文件中时,它们可以通过编译。仅不适用于不同的文件。这是swift的bug吗?

最佳答案

看起来,Default Initializer 对其他文件是不可见的,就好像它被声明为 private init() {} 一样。不过,我还没有找到任何关于此行为的官方文档。我认为这是一个错误。

无论如何,明确的 init() 声明解决了这个问题。

public class Vehicle {

init() {} // <- HERE

var numberOfWheels: Int?
var description: String {
return "\(numberOfWheels) wheel(s)"
}
}

或者如@rdelmar 在评论中所说,numberOfWheels 的显式初始值也有效:

public class Vehicle {
var numberOfWheels: Int? = nil
var description: String {
return "\(numberOfWheels) wheel(s)"
}
}

关于ios - 在不同的 swift 文件中覆盖父类(super class)的默认初始化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26727973/

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