大佬教程收集整理的这篇文章主要介绍了泛型 – 使用自身作为通用类型,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func doSomething() -> Self {}
使用Self作为这样的泛型吗?
func doSomething() -> Wrapper<Self> {}
例
这将是很好,如果我可以子类ChristmasPresent,并让它有一个包装函数,返回一个WrappedPresent与通用集到任何子类.
class ChristmasPresent { func wrapped() -> WrappedPresent<Self> { return WrappedPresent(present: self) } } class WrappedPresent<T: ChristmasPresent> { var present: T init(present: T) { self.present = present } } class ToyCar: ChristmasPresent {} let wrappedToyCar = ToyCar().wrapped() // Inferred to be: WrappedPresent<ToyCar>
class ChristmasPresent {} struct WrappedPresent<T: ChristmasPresent> { let present: T } func wrap<T:ChristmasPresent>(present: T) -> WrappedPresent<T> { return WrappedPresent(present: present); } class ToyCar: ChristmasPresent {} let wrappedToyCar = wrap(ToyCar()) // Inferred to be: WrappedPresent<ToyCar>
请注意,如果您的代码编译完成,您可能会对结果感到非常惊讶. Swift custom types are not covariant,所以WrappedPresent& ToyCar>不是WrappedPresent< ChristmasPresent>的子类型.所以如果你有一个包裹的礼物的数组,你不能把一个包装的东西放在里面.这可能很容易迫使你回到刚刚使用固定(非类型参数化)WrappedPresent类型,无论如何,使问题模糊.泛型和课堂并不总是与Swift中所想像的那样混合.
以上是大佬教程为你收集整理的泛型 – 使用自身作为通用类型全部内容,希望文章能够帮你解决泛型 – 使用自身作为通用类型所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。