我无法理解,为什么在某些情况下我会收到错误"扩展中的声明无法覆盖"而在其他情况下 - 不是。
代码:
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
}
为什么我可以覆盖数组并且无法覆盖选项数组?
答案 0 :(得分:1)
您无法使用扩展名覆盖添加到基类的变量或函数。这可能在未来的Swift版本中成为可能。
编译器可能会让您使用纯(或桥接)Objective-C类型,但只要您使用Swift类型(例如,Optional或Enum等),您就会收到编译错误。< / p>