में प्रोटोकॉल एक्सटेंशन विधि प्रेषण प्रोटोकॉल विधियों प्रेषण के संबंध में मुझे एक समस्या का सामना करना पड़ रहा है।स्विफ्ट 2.0
मैं एक वर्ग पदानुक्रम है कि उस तरह दिखता है:
protocol E {
func test()
}
extension E {
func test() {
print("jello")
}
}
class A: E {
}
class B: A {
func test() {
print("hello")
}
}
लेकिन जब मैं कक्षा B
का एक उदाहरण पर test
फोन स्थिर A
लिखा जाता है, "jello" मुद्रित हो जाता है, नहीं "हैलो" मजबूर कर दिया।
let b: A = B() // prints "jello" not "hello"
b.test()
मेरे समझ के साथ कि test
विधि मुद्रण "jello" "एकीकृत" हो जाता है A
के उदाहरण में (के बाद से A
E
प्रोटोकॉल के अनुरूप है) है। मैं के अंदर test
का एक और कार्यान्वयन प्रदान कर रहा हूं (जो A
बनता है)। मैंने सोचा कि पॉलिमॉर्फिज्म यहां काम करेगा और पर B
पर A
संदर्भों के अंदर संग्रहीत उदाहरण hello
प्रिंट करेगा। यहाँ क्या हो रहा है?
यह पूरी तरह से काम कर रहा है जब किसी भी प्रोटोकॉल का उपयोग नहीं:
class A {
func test() {
print("jello")
}
}
class B: A {
override func test() {
print("hello")
}
}
let b: A = B() // prints "hello"
b.test()
क्या एक प्रोटोकॉल है कि मेरे माता-पिता वर्ग के लिए नए तरीकों को कहते हैं अपनाने और एक उपवर्ग में एक नया कार्यान्वयन उपलब्ध कराने के सीधे इस विधि में लिखा होने से, से अलग है अभिभावक वर्ग और फिर इसे उप-वर्ग में ओवरराइड करना?
क्या आपके पास कोई कामकाज है?
सटीक व्यवहार नहीं जो आप देख रहे हैं, लेकिन निकट से संबंधित: http://nomothetis.svbtle.com/the-ghost-of-swift-bugs- भविष्य –