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

2021-09-21  本文已影响0人  gerrywanggang

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读