【问题标题】:What does this generic type constraint mean in Swift?这个泛型类型约束在 Swift 中意味着什么?
【发布时间】:2014-08-01 15:57:01
【问题描述】:

查看 Swift 中+= 运算符重载的定义,它允许您将元素添加到集合中:

/// Append the elements of rhs to lhs
func +=<T, C : Collection where T == T>(inout lhs: ContiguousArrayBuffer<T>, rhs: C)
                                ^^^^^^

T == T 约束有什么作用?为什么我们在这里需要它?它看起来像一个微不足道的约束,但总是正确的。

【问题讨论】:

  • 在这个全局运算符重载函数内部看起来确实很奇怪......但是看看其他使用它的地方,例如extension T[] : ArrayType {init&lt;S : Sequence where T == T&gt;(_ s: S)} 看起来它只是试图确保参数序列的元素与您尝试初始化的数组具有相同的类型。我不确定如何通过这种语法强制执行..

标签: generics collections swift type-constraints


【解决方案1】:

您在 Xcode 中看到的定义实际上不是有效的 Swift 代码。它是从原始文件动态生成的

我认为T == T 部分是生成器在减少原始文件时犯的错误。

我已经尝试自己定义一个类似的函数,T == T 不是必需的,它实际上有时会触发警告。

【讨论】:

  • 我会在我的桌面上详细说明。
  • 我相信你是对的。声明是自动生成的。 1/ 您无法在 Finder 中显示文件。 2/ 符号按名称按 ASCII 顺序排序。没有人会那样对代码进行排序。 3/ 一些扩展是空的,这表明它们包含未解析/转换的代码。 5/ 声明不完整。例如,没有方法被声明为mutating,这意味着我们应该能够在常量上使用任何方法(但我们不能)。
  • @NicolasBachschmidt 还有一些无效的语法,例如extension T[]。我相信T == T 在这种情况下是存在的,因为该函数是私有协议实现的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多