Ios 在不同的swift文件中重写超类的默认初始值设定项

Ios 在不同的swift文件中重写超类的默认初始值设定项,ios,macos,cocoa,swift,Ios,Macos,Cocoa,Swift,我在Vehicle.swift中编写了类Vehicle,并在Bicycle.swift中的另一个类Bicycle中继承了它。但Xcode 6.1报告了一个编译错误:初始值设定项不重写其超类中指定的初始值设定项。 Vehicle.swift: import Foundation public class Vehicle { var numberOfWheels: Int? var description: String { return "\(numberOfWh

我在Vehicle.swift中编写了类Vehicle,并在Bicycle.swift中的另一个类Bicycle中继承了它。但Xcode 6.1报告了一个编译错误:初始值设定项不重写其超类中指定的初始值设定项。 Vehicle.swift:

import Foundation

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

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

import Foundation

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

public class Bicycle: Vehicle {
    override init() {
        super.init()
        numberOfWheels = 2
    }
}
这些代码来自苹果iOS开发者库。链接:


当在同一个.swift文件中时,它们可以通过编译。仅在不同的文件中不工作。这是swift的一个缺陷吗?

自行车不是公共类。苹果图书馆的代码:

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

看起来,默认初始值设定项在其他文件中是不可见的,好像它被声明为
private init(){}
。 不过,我还没有找到任何关于这种行为的官方文件。我想这是一只虫子

无论如何,显式
init()
声明解决了这个问题

public class Vehicle {

    init() {} // <- HERE

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

是的,但是删除公共后错误仍然存在。项目中的其他类应该访问Internal。如果在Vehicle类中为numberOfWheels提供默认值,它应该可以正常工作。我对文档的理解会建议使用Int?应该也能工作(因为它得到了一个默认值nil),但情况似乎并非如此。是的,这是可行的。现在,显式init()声明可能是合适的方式。我发现:对于定义为public的类型,默认初始值设定项被认为是内部的。链接:所以,我认为这一定是一个bug。可能相关的开发者论坛主题:这可能是最合适的解决方案。