gpt4 book ai didi

ios - var label : UILabel! 和 var label = UILabel( ) 有什么区别?

转载 作者:搜寻专家 更新时间:2023-11-01 06:23:36 26 4
gpt4 key购买 nike

我注意到当我在 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 变量(可选),但您可以假装它不会访问它 - 通常这意味着它将是一个 IBOutlet,将由界面 Storyboard 在加载时设置,在您尝试使用标签之前。

var label = UILabel()

声明您有一个标签,该标签将始终包含一个标签,并且永远不会为零。它也在创建类实例时创建 UILabel 的实例,即使您说您在 viewDidLoad()

中为变量分配了不同的标签

访问权限没有区别,但这确实意味着无论您何时使用该变量,它都将保存一个真实值而不是 nil。

它们都是UILabel类型的变量。

我不确定为什么您不能使用 CGRect 构造函数将变量设置为新的 UILabel,这应该是可能的。也许你曾说过 let label = UILabel(),这意味着它是一个固定变量,不能保存新值 - 所以你所能做的就是改变变量的框架已经存在。

对于像您正在做的事情,最好的方法是将变量声明为可选:

 var label : UILabel?

这使它成为一个真正的可选,并确保您不会意外编写错误访问变量的代码,如果它从未被设置,或者在您分配“真正的” UILabel 之前为您的第一个标签设置一个值 viewDidLoad 方法。访问有点不同,但并不难 - 要设置文本,您只需使用“?”如果已设置实例,可选择调用该属性的语法:

label?.text = "fred"

关于ios - var label : UILabel! 和 var label = UILabel( ) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28734235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com