Невозможно скомпилировать при использовании расширения протокола и @objc

Я не могу скомпилировать следующий код, и я не знаю, почему. Я упростил это до этого ради удобочитаемости.

@objc protocol MyProtocol {

    func someMethod() -> String
}

extension MyProtocol {

    func someMethod() -> String {
        return "Foo"
    }
}

@objc class MyClass: NSObject, MyProtocol {

}

let obj: MyProtocol = MyClass()
obj.someMethod()

Что странно, так это то, что если я объявлю obj типом MyClass, вот так:

let obj: MyClass = MyClass()

Это работает нормально. Это также работает, если я удалю @objc из определения протокола. Экземпляры MyClass будут использоваться Objective-C, поэтому мне нужно использовать @objc.

Заранее благодарю за любую помощь.


person Darren Findlay    schedule 03.12.2015    source источник
comment
То же, что и вопрос, связанный с дублированием. Расширение протокола несовместимо с Objective-C, поэтому вы не можете передать его в мир Objective-C, сделав MyClass NSObject, как вы пытаетесь сделать.   -  person matt    schedule 03.12.2015
comment
Ок, отлично. Спасибо, Мэтт!   -  person Darren Findlay    schedule 03.12.2015
comment
Без проблем. Вы очень хорошо описали граничные условия, при которых это допустимо (т. е. расширенный протокол и класс принятия не могут оба быть Objective-C); проголосовал за это.   -  person matt    schedule 03.12.2015