Ich bin mir nicht sicher, es sieht für mich so aus, als ob es eine Art Bug oder eine schlechte Implementierung mit Protokollerweiterungen in Swift 2.0 ist.Swift 2, Protokollerweiterungen & AntwortenToSelector
Ich habe protocolA, protocolB protocolA erweitern und Methoden in protocolB Erweiterung implementieren.
Ich habe eine Klasseninstanz so angepasst, dass sie protocolB entspricht. Wenn sie jedoch von der Methode "answerToSelector" für protocolA/B-Methoden überprüft wird, ist das Ergebnis falsch.
import Cocoa
import XCPlayground
protocol ProtocolA : NSObjectProtocol {
func functionA()
}
protocol ProtocolB : ProtocolA {
func functionB()
}
extension ProtocolB {
func functionA() {
print("Passed functionA")
}
func functionB() {
print("Passed functionB")
}
}
class TestClass : NSObject, ProtocolB {
override init() {
}
}
var instance:TestClass = TestClass()
instance.functionA() // Calls code OK..
if instance.respondsToSelector("functionA") {
print("Responds to functionA") // **False, never passing here**
}
if instance.respondsToSelector("functionB") {
print("Responds to functionB") // **False, never passing here**
}
Sollte als Fehler gemeldet werden?
Sie sollten einen Fehler einreichen. – Laurent
Yup. Hast du schon einen Fehler eingereicht? :) – tadija
Ja, in der Tat ist es ein Fehler. Hast du es zufällig abgelegt? – csotiriou