【发布时间】:2015-02-26 04:01:09
【问题描述】:
我注意到,当我用 Swift 编写代码时,如果我在 ViewController 中声明一个标签为 var label: UILabel! 或 var label = UILabel(),然后在 viewDidLoad 方法中初始化它们,它们似乎都在功能上, 工作相同。那么这两者有什么区别呢?
在相关说明中,当我声明var label: UILabel! 时,我必须写label = UILabel(frame:CGRectMake(...)),但如果我使用var label = UILabel(),我必须写label.frame = CGRectMake(...)。这是因为var label = UILabel() 既声明又实例化了一个类对象,而var label: UILabel! 只是声明了一个类型的变量?我对这里实际发生的事情感到困惑。
提前致谢!
【问题讨论】:
-
你可以写
var label: UILabel! = UILabel(),不是吗?这是什么意思(尤其是必须稍后设置框架)?在没有明确类型的情况下查找Type Inference - 例如。带有“:” - 指定。 -
所以
var label: UILabel!正在设置一个名为 label 的变量,其类型为 UILabel,var label = UILabel()正在创建一个类实例并简单地推断 UILabel 类型(这就是为什么不需要: UILabel!) ?var label = UILabel()是var label: UILabel! = UILabel(),只是因为类型推断而变得简写? -
是的。类型推断是 Swift 的核心。这并不比
var x = 3将 x 推断为Int更令人惊讶。 -
我想我的大脑已经快要意识到这一点了。感谢 BaseZen!对我来说是一个真正的 /headdesk 时刻。