【问题标题】:How can I return a Swift generic from a general extension?如何从通用扩展中返回 Swift 泛型?
【发布时间】:2020-02-23 18:40:12
【问题描述】:

如果我有这样的通用类:

class Generic<T: Any> {
    var object: T
    init(object: T) {
        self.object = object
    }
}

我可以像这样从初始化器访问对象:

Generic(object: "Hello World").object.count // 11

由于这个泛型类适用于Any 类型,我将如何扩展所有类型以返回该泛型类的对象?

我的意思是这样的:

extension Any {
    var generic: Generic<Self> {
        Generic(object: self)
    }
}

所以我可以打电话:

"Hello World".generic.object.count // 11

我对所有Any、AnyObject、Self、self、Type 等等都感到困惑。

更新:

例如,如何使用计算属性 array: Array&lt;Comparable&gt; 扩展所有 Comparable?我正在考虑类似的事情:

extension Comparable {
    var array: Array<Comparable> {
        Array(self)
    }
}

【问题讨论】:

  • 你想完成什么?
  • 我想了解如何通过使用扩展类的对象返回该类的对象来扩展泛型类可能受限的各种类。
  • 例如在Any 上写一个扩展,这样它就能够返回一个由对象组成的数组。喜欢5.array 返回[5]。
  • 我不明白。 Generic 实际上是一个对象包装器。您使用字符串创建一个实例,然后使用 object 属性取回字符串。有什么好处?
  • 没有任何好处。老实说,这没有意义。我仍然想知道如何做到这一点。

标签: swift generics types self any


【解决方案1】:

您不能扩展 Any,请参阅 https://stackoverflow.com/a/44396546/12846974

Comparable 扩展示例:

extension Comparable {
    var array: Array<Self> {
        [self]
    }
}

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 2018-07-13
    • 2018-01-10
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多