【问题标题】:Advantage of telling the Swift Compiler an object's type, instead of inferring?告诉 Swift 编译器对象的类型而不是推断的好处?
【发布时间】:2015-06-03 15:34:31
【问题描述】:

我已经做了几个月的 Swift 编程,我一直对此很好奇......

在声明中告诉 Swift 编译器对象的类型有好处吗? 即let image: UIImage = UIImage()

与不告诉编译器并让它在运行时推断类型相比。即let image = UIImage()

我认为告诉编译器对象类型而不是让它推断类型会更有效。我知道这个问题也适用于 Objective-C 语法,所以我会在标签中添加它。

【问题讨论】:

    标签: ios swift variable-declaration


    【解决方案1】:

    两者之间的运行时效率差异为零。在编译期间,Swift 会推断类型并为您编写它。但是一旦编译,这两个语句是相同的。

    这纯粹是一个可读性问题,有时还有编译器效率问题。

    可读性,因为在声明let image: UIImage = UIImage() 中,UIImage 的双重出现只是杂乱无章。对于更复杂的类型,这非常重要——没有人愿意写let keys: LazyForwardCollection<MapCollectionView<Dictionary<String, Int>, String>> = dict.keys,而他们可以写let keys = dict.keys

    编译器效率,因为偶尔你会发现一个特别模棱两可的类型(字面量的字面量因此而臭名昭著)如果你明确地命名在左侧键入。但这只是编译速度的问题,而不是编译后运行速度的问题。

    【讨论】:

      【解决方案2】:

      来自Swift Documentation

      在实践中很少需要编写类型注释。如果你在定义常量或变量时为其提供初始值,Swift 几乎总能推断出用于该常量或变量的类型,如Type Safety and Type Inference中所述

      所以声明实例类型与否无关紧要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多