2015-06-25 9 views
6

Nie jestem pewien, wydaje mi się, że jest to jakiś błąd lub zła implementacja z rozszerzeniami protokołów w Swift 2.0.Swift 2, rozszerzenia protokołów i odpowiedziToSelector

Mam protokół A, protokół B rozszerzający protokół A i metody implementacji w rozszerzeniu protocolB.

Poprawiłem instancję klasy, aby była zgodna z protokołem B, jednak podczas sprawdzania przez respondsToSelector dla metod protokołu A/B wyniki są fałszywe.

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** 
} 

Należy zgłosić jako błąd?

+0

Powinieneś zgłosić błąd. – Laurent

+0

Yup. Czy już zgłosiłeś błąd? :) – tadija

+0

Tak, rzeczywiście jest to błąd. Czy zdarzyło ci się go złożyć? – csotiriou

Odpowiedz

6

Interesujące. Wygląda mi na błąd. Wyróżnia funkcje na klasie, ale nie na rozszerzeniu. Bez względu na typ instancji. Ponadto bez kodu rozszerzeń nie można ich skompilować, ponieważ metody protokołów nie są opcjonalne. Czy naprawdę wygląda na błąd/funkcję? w odpowiedzi na implementację selektora.