나는 스위프트 3의 기본 클래스와 하위 클래스에 ==
연산자 (Equatable
)를 구현하려고합니다. 모든 클래스는 Swift에서만 사용되므로 NSObject
또는 NSCopying
프로토콜을 사용하고 싶지 않습니다. 클래스 계층에서 Equatable 프로토콜을 올바르게 구현하는 방법은 무엇입니까?
class Base {
var x : Int
}
class Subclass : Base {
var y : String
}
가 지금은
Equatable
를 추가하고 싶었
Base
에
==
운영자 :
나는 기본 클래스와 서브 클래스로 시작했다. 충분히 단순 해 보입니다. 문서에서
==
운영자 서명을 복사
class Base : Equatable {
var x : Int
static func == (lhs: Base, rhs: Base) -> Bool {
return lhs.x == rhs.x
}
}
를 지금까지 너무 좋아. 이제 서브 클래스 :
class Subclass : Base {
static override func == (lhs: Base, rhs: Base) -> Bool {
return true
}
}
하지만이 오류가 발생합니다
Operator function overrides a 'final' operator function
확인을 클릭합니다. 몇 가지 연구 (Swift 3을 배우는 것) 후에 static
을 class
으로 대체 할 수 있으므로 형식 메서드를 재정의 할 수 있음을 나타냅니다.
그래서 나는 Base
에 class
에 static
을 변경하려고 :
class Base : Equatable {
var x : Int
class func == (lhs: Base, rhs: Base) -> Bool {
return lhs.x == rhs.x
}
}
그러나 그것은 새로운 오류가 발생합니다 :
Operator '==' declared in non-final class 'Base' must be 'final'
윽합니다. 이것은해야 할 것보다 훨씬 더 복잡합니다.
Equatable
프로토콜과 ==
연산자를 기본 클래스와 하위 클래스에 올바르게 구현하려면 어떻게해야합니까?
받아야합니다. 영리하게 해결할 수 있지만 이것이 스위프트가하는 일입니다. –