Cannot explicitly specialize a generic function

swift3.1之后使用范型函数

类似

private func getData<T>(a: T) {
}
直接调用

self.getData<A>(a)

会出现上述错误:不知道泛型的类型

解决方案

让xcode推断出范型的类型

Typically there are many ways to define generic functions. But they are based on condition that Tmust be used as a parameter, or as a return type

extension UIViewController {
    class func doSomething<T: UIView>() -> T {
        return T()
    }

    class func doSomethingElse<T: UIView>(value: T) {
        // Note: value is a instance of T
    }

    class func doLastThing<T: UIView>(value: T.Type) {
        // Note: value is a MetaType of T
    }
}
let result = UIViewController.doSomething() as UIImageView // Define `T` by casting, as UIImageView
let result: UILabel = UIViewController.doSomething() // Define `T` with property type, as UILabel
UIViewController.doSomethingElse(value: UIButton()) // Define `T` with parameter type, as UIButton
UIViewController.doLastThing(value: UITextView.self) // Define `T` with parameter type, as UITextView

猜你喜欢

转载自blog.csdn.net/feifeiwuxian/article/details/79196058