在Swift4中扩展泛型类

Kam*_*icz 13 generics ios swift

让我们假设我们有一个简单的泛型类:

class Foo<T> {

}
Run Code Online (Sandbox Code Playgroud)

接下来添加到这个extension实现的类UITableViewDatasoure:

extension Foo: UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //Code here
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //Code here
    }
}
Run Code Online (Sandbox Code Playgroud)

此结构导致编译器错误消息:

从泛型类Non-'@ objc'方法继承的泛型类或类的扩展中不支持@objc

'tableView(_:numberOfRowsInSection :)'不满足'@objc'协议'UITableViewDataSource'的要求

谁能告诉我为什么?以及如何解决这个问题?

Rob*_*ier 26

错误消息似乎非常清楚.这不受支持.您无法将@objc方法附加到扩展中的泛型类.您需要在类定义中定义这些方法,而不是扩展."为什么"是"编译器今天不支持它".(由于专业化,很可能难以支持,但真正的答案是"编译器无法做到.")