【问题标题】:Swift leave out .self to invoke a function which needs metatype?Swift 省略 .self 来调用需要元类型的函数?
【发布时间】:2015-10-31 02:21:11
【问题描述】:

这是我写的代码:

func printType<T: Any>(one: T.Type) {
    print(one)
}
func printType2<T: Any>(one: T.Type, name: String) {
    print(one)
}
printType(Set<Int>)
printType2(Set<Int>.self, name: "name")

我想知道为什么printType(Set&lt;Int&gt;) 可以工作。在printType2(Set&lt;Int&gt;.self, name: "name") 中,我不能省略 .self 以使其工作。

编辑:

我想知道当我可以省略 .self 时意味着哪条规则。我曾尝试在 Apple 官方参考资料中找到它,但失败了。

编辑:

我在 Xcode 版本 7.1 (7B91b) 中测试代码。

【问题讨论】:

  • 除了“这就是语言当前的工作方式”之外,我不确定这里还有很多话要说。如果是唯一参数,则可以省略 .self
  • 这就像问为什么美式足球场有 100 码长。这是因为足球就是这样运作的。
  • @jtbandes 但我认为它不应该省略 .self,它只是在 swift 中没有意义,我还没有发现任何规则可以解释它(参考)。
  • 在我看来像一个编译器错误。

标签: swift


【解决方案1】:

我也在苹果官方论坛上问过,在那里得到答案:

这是 Swift 的一个著名的未记录功能,自 1.0(或以前的 > 测试版,我无法确认)以来。

使用单一类型参数调用方法或函数时,可以省略 > .self 。 我想这个特性被包含在 Swift 中是为了使类似 sizeof 的函数 > 整洁,但不确定。

https://forums.developer.apple.com/thread/24980

【讨论】:

  • 不过还是期待更多官方参考。
猜你喜欢
  • 1970-01-01
  • 2011-09-03
  • 2019-05-26
  • 1970-01-01
  • 2021-05-25
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多