【问题标题】:Swift: Declaration in generic classSwift:泛型类中的声明
【发布时间】:2016-06-12 01:12:25
【问题描述】:

假设我有一个通用类:

class SomeClass<Element> {
  // What is the difference between this:
  var array: [SomeClass]!

  // and this declaration:
  var array2: [SomeClass<Element>]!
}

这些声明有什么区别?

【问题讨论】:

  • 似乎它们是完全一样的,只是对于array 推断了通用参数。我在语言参考中找不到它。
  • 看起来没有 - 我本以为会有所不同,但似乎它们是等价的。
  • 请注意,您可以按住 alt 键单击 Xcode 中的属性,以查看它推断出的类型是什么——实际上它们看起来是相同的。在其自己的声明中引用泛型类时,似乎是类型推断的一种特殊情况。

标签: swift generics


【解决方案1】:

没有泛型参数就不能存在泛型类型,因此省略泛型类型意味着您希望编译器推断类型。

在这种情况下,要推断的逻辑类型是Element

请注意,这仅是因为您在 SomeClass 声明中使用了 SomeClass。它不适用于不同的泛型类。

可以在变量声明中使用类似的泛型参数推断:

let instance: SomeClass = SomeClass<Int>()
let array: Array = [1] // Array<Int>

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多