Swift 3 поставляется с SE-0057, который, среди прочего, означает, что:
По умолчанию расширения параметризованных классов Objective-C никак не могут ссылаться на параметры типа. Например:
extension MySet { func someNewMethod(x: T) { ... } // error: cannot use `T`. }
... где MySet
объявляется в ObjC как @interface MySet<T : id<NSCopying>> : NSObject
.
Все, что ясно (и возможно какое-то обходное решение). Однако следующее не компилируется, несмотря на то, что я не использую никаких параметров типа из класса ObjC, который я пытаюсь расширить. Я использую другой несвязанный класс Swift как возвращаемый параметр для метода расширения:
class Foo { }
struct Bar { }
extension MySet {
func foo() -> Foo { return Foo() } // Both produce: Extension of a generic
func bar() -> Bar { return Bar() } // Objective-C class cannot access the
} // class generic parameters at runtime
Это ошибка? Или я что-то упускаю?