为什么我们需要在创建对象时对 dataType 进行 foreUnwrap? Swift 5
why do we need to foreUnwrap the dataType while creating an object? Swift 5
每当我在 ViewController class 中创建任何对象时上网或在线检查项目时,我都会在数据类型末尾看到感叹号 (!),这是为什么?例如:@IBOutlet weak var Label:UILabel!
那为什么是'!'标记或者为什么我们要强制展开它?
而且当我删除它时,它会报错,我们也可以这样写 @IBOutlet weak var Label=UILabel()
那我们为什么不使用它呢?
你需要一步一步去了解事情才能得到答案。
- @IBOutlet:这是一个 属性 包装器,告诉 Xcode 将故事板上的元素与
.swift
文件中的元素连接起来。
!
标记:推荐使用force-unwrap这个东西,因为当.swift
文件需要实例的时候,肯定能在storyboard中找到连接的元素。我们也可以写@IBOutlet weak var Label: UILabel?在这种情况下,实例 Label
是可选的。
- @IBOutlet weak var Label=UILabel():在这种情况下,实例
Label's
值在初始化后立即被 UILabel()
覆盖。 Label = UILabel()
之后的 @IBOutlet weak var Label!
和 Label
不是同一个实例。
@IBOutlet weak var label: UILabel
相当于写var label: UILabel
。因此 i-val 没有初始值并且 Swift 不允许这样做。在 Swift 中,您要么必须为变量赋值,要么使其成为 optional/unwrapped 以显式处理 nil 值。而且,当您使用 @IBOutlet
解包实例时,您可以稍后将其与 ?
一起使用,例如 label?.text = "Some text"
.
因此,我们被迫使用 !
或 ?
作为出口来明确地使变量可选,就像其他变量声明一样。而且我们在声明后不使用 = UILabel()
,因为它会覆盖从 Storyboard 创建的实例(使用笔尖中的 NSCoder/Coder
初始化)。
每当我在 ViewController class 中创建任何对象时上网或在线检查项目时,我都会在数据类型末尾看到感叹号 (!),这是为什么?例如:@IBOutlet weak var Label:UILabel! 那为什么是'!'标记或者为什么我们要强制展开它? 而且当我删除它时,它会报错,我们也可以这样写 @IBOutlet weak var Label=UILabel() 那我们为什么不使用它呢?
你需要一步一步去了解事情才能得到答案。
- @IBOutlet:这是一个 属性 包装器,告诉 Xcode 将故事板上的元素与
.swift
文件中的元素连接起来。 !
标记:推荐使用force-unwrap这个东西,因为当.swift
文件需要实例的时候,肯定能在storyboard中找到连接的元素。我们也可以写@IBOutlet weak var Label: UILabel?在这种情况下,实例Label
是可选的。- @IBOutlet weak var Label=UILabel():在这种情况下,实例
Label's
值在初始化后立即被UILabel()
覆盖。Label = UILabel()
之后的@IBOutlet weak var Label!
和Label
不是同一个实例。
@IBOutlet weak var label: UILabel
相当于写var label: UILabel
。因此 i-val 没有初始值并且 Swift 不允许这样做。在 Swift 中,您要么必须为变量赋值,要么使其成为 optional/unwrapped 以显式处理 nil 值。而且,当您使用 @IBOutlet
解包实例时,您可以稍后将其与 ?
一起使用,例如 label?.text = "Some text"
.
因此,我们被迫使用 !
或 ?
作为出口来明确地使变量可选,就像其他变量声明一样。而且我们在声明后不使用 = UILabel()
,因为它会覆盖从 Storyboard 创建的实例(使用笔尖中的 NSCoder/Coder
初始化)。