2017-09-06 44 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類型(例如可選或枚舉等),您將收到編譯錯誤。