swift泛型协议在函数中做参数和返回值

泛型协议在函数中作为参数和返回值类型使用
泛型协议只能作为泛型的约束使用,不能直接作为函数参数或者返回值类型使用。
就是说,函数要使用泛型协议作为类型,只能转换一下: 在函数中添加一个泛型,让泛型协议作为这个泛型的约束,然后就可以使用了。如下:

protocol SupermanType {
    associatedtype NAMETYPE
}
struct Superman: SupermanType {
    typealias NAMETYPE = T
}
func makeASuperMan(type: S.Type) -> S {
    Superman.init() as! S
}
let superman = makeASuperMan(type: Superman.self)

在makeASuperMan函数中, S为泛型, SupermanType为泛型协议。SupermanType还只能作为泛型约束,不能作为参数类型。

你可能感兴趣的:(swift泛型协议在函数中做参数和返回值)