Viene chiamato il metodo di estensione del protocollo Swift invece del metodo implementato in sottoclass

Ho riscontrato un problema che è spiegato nel codice seguente (Swift 3.1):

protocol MyProtocol { func methodA() func methodB() } extension MyProtocol { func methodA() { print("Default methodA") } func methodB() { methodA() } } // Test 1 class BaseClass: MyProtocol { } class SubClass: BaseClass { func methodA() { print("SubClass methodA") } } let object1 = SubClass() object1.methodB() // // Test 2 class JustClass: MyProtocol { func methodA() { print("JustClass methodA") } } let object2 = JustClass() object2.methodB() // // Output // Default methodA // JustClass methodA 

Quindi mi aspetto che il testo “Metodo sottoclassA” debba essere stampato dopo la chiamata a object1.methodB() . Ma per qualche ragione viene chiamata l’implementazione predefinita di methodA() dall’estensione del protocollo. Tuttavia, la chiamata object2.methodB() funziona come previsto.

È un altro bug di Swift nel metodo di invio del protocollo o mi manca qualcosa e il codice funziona correttamente?