मैं एक आधार वर्ग में (Equatable
से) ==
ऑपरेटर को लागू करने की कोशिश कर रहा हूँ और स्विफ्ट 3. वर्गों के सभी में अपनी उपवर्गों केवल स्विफ्ट में इस्तेमाल किया जाएगा तो मैं NSObject
या NSCopying
प्रोटोकॉल शामिल करने के लिए नहीं करना चाहती।कक्षा पदानुक्रम में समतुल्य प्रोटोकॉल को सही तरीके से कार्यान्वित कैसे करें?
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
ठीक है। कुछ शोध के बाद (अभी भी स्विफ्ट 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
प्रोटोकॉल और ==
ऑपरेटर को कैसे कार्यान्वित कर सकता हूं?
वाह। चालाक काम-आसपास, लेकिन क्या यह वास्तव में स्विफ्ट हमें क्या करता है? –