2017-09-06 15 views
1

我无法理解,为什么在某些情况下我出现错误“扩展中的声明无法覆盖”,而在其他情况下则不是。奇怪的错误“扩展中的声明无法覆盖”

代码:

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

可能是重复的https://stackoverflow.com/questions/34061246/override-function-error-in-swift – XmasRights

回答

1

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

编译器可能会让您使用纯的(或桥接的)Objective-C类型,但只要您使用Swift类型(例如可选或枚举等),您将收到编译错误。