Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了泛型 – 使用自身作为通用类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

自己可以用作一种方法的返回类型: func doSomething() -> Self {} 使用Self作为这样的泛型吗? func doSomething() -> Wrapper<Self> {} 例 这将是很好,如果我可以子类ChristmasPresent,并让它有一个包装函数,返回一个WrappedPresent与通用集到任何子类. class ChristmasPresent {
自己可以用作一种方法的返回类型:
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>
Swift最令人震惊的悖论是:“Swift喜欢方法,但Swift的功能更强大.” Swift团队知道,有一天我肯定会有强大的方法.但今天不是那一天.有很多事情你想表达的方法,你不能.然而,您所需要的一切都可以轻松完成.
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中所想像的那样混合.

如果你有一个问题的实际例子,你想要解决这个问题,那么我建议把它放在dev论坛上. Swift团队非常敏感.

大佬总结

以上是大佬教程为你收集整理的泛型 – 使用自身作为通用类型全部内容,希望文章能够帮你解决泛型 – 使用自身作为通用类型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。