2017-09-06 5 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 
} 

가 왜 배열을 오버라이드 (override)하는 수 있고 선택적 항목 배열을 무시할 수없는 이유는 무엇입니까?

+0

아마도 https://stackoverflow.com/questions/34061246/override-function-error-in-swift의 중복 – XmasRights

답변

1

확장을 사용하여 기본 클래스에 추가 한 변수 또는 함수를 재정의 할 수 없습니다. 이것은 Swift의 차후 버전에서 가능해질 수 있습니다.

컴파일러는 순수한 (또는 브리징 된) Objective-C 유형으로 실망시킬 수 있지만 Swift 유형 (예 : 선택 사항 또는 열거 형 등)을 사용하자마자 컴파일 오류가 발생합니다.