2015-06-25 6 views
6

Я не уверен, мне кажется, что это какая-то ошибка или плохая реализация с расширением протокола в Swift 2.0.Swift 2, расширения протокола и ответыToSelector

У меня есть протокол A, протокол b, расширяющий протоколA и реализующие методы в расширении protocolB.

Я соответствовал экземпляру класса, чтобы соответствовать протоколу B, однако при проверке с помощью методов ответаSoSlector для методов протокола A/B результаты являются ложными.

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

Следует ли сообщать об ошибке?

+0

Вы должны указать ошибку. – Laurent

+0

Yup. Вы уже зарегистрировали ошибку? :) – tadija

+0

Да, действительно, это ошибка. Вы случайно его зарегистрировали? – csotiriou

ответ

6

Интересно. Похож на меня. Он распознает функции класса, но не расширения. Независимо от типа экземпляра. Более того, код расширения не будет компилироваться, поскольку методы протокола не являются необязательными. Так действительно выглядит ошибка/особенность? в ответ на реализацию селектора.

Смежные вопросы