2015-06-25 18 views
6

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?

+0

Sie sollten einen Fehler einreichen. – Laurent

+0

Yup. Hast du schon einen Fehler eingereicht? :) – tadija

+0

Ja, in der Tat ist es ein Fehler. Hast du es zufällig abgelegt? – csotiriou

Antwort

6

Interessant. Sieht für mich wie ein Käfer aus. Es erkennt Funktionen in einer Klasse, aber nicht in der Erweiterung. Egal, welchen Typ Instanz hat. Außerdem wäre ein Erweiterungscode nicht kompilierbar, da Protokollmethoden nicht optional sind. Sieht wirklich wie ein Fehler/Feature aus? reagiert auf Selektorimplementierung.