奇怪的错误"扩展中的声明无法覆盖"

时间:2017-09-06 16:31:35

标签: swift override

我无法理解,为什么在某些情况下我会收到错误"扩展中的声明无法覆盖"而在其他情况下 - 不是。

代码:

protocol ConstrTest {
    var goodConstraints: [NSLayoutConstraint] {get}
    var badConstraints: [NSLayoutConstraint?] {get}
}

extension UIViewController: ConstrTest
{
    var goodConstraints: [NSLayoutConstraint] {
        return []
    }

    var badConstraints: [NSLayoutConstraint?] {
        return []
    }
}

class TestViewController: UIViewController {
    override var goodConstraints: [NSLayoutConstraint] {
        return []
    } //No errors and it works

    override var badConstraints: [NSLayoutConstraint?] {
        return []
    } //Got error Declarations in extensions cannot override
}

为什么我可以覆盖数组并且无法覆盖选项数组?

1 个答案:

答案 0 :(得分:1)

您无法使用扩展名覆盖添加到基类的变量或函数。这可能在未来的Swift版本中成为可能。

编译器可能会让您使用纯(或桥接)Objective-C类型,但只要您使用Swift类型(例如,Optional或Enum等),您就会收到编译错误。< / p>