Swift中的@IBOutlet用 var 及 Optional 定义的原因
定义 原因 swift var optional
2023-09-27 14:27:45 时间
熟悉IOS的朋友们一定很熟悉@IBOutlet
了(bushi,它是链接到界面元素(storyBoard或xib)的一个变量,通常用以下代码表示:
@IBOutlet private var nameLabel: UILabel!
但是为什么要用var
和Option
来声明呢?
我们来做个试验:
如果我们将var
换成let
:
- @IBOutlet标识的属性必须是可变的
如果将UILabel!
换成UILabel
:
- @IBOutlet标识的属性有一个非可选的ULabel类型
这是为什么呢?
Swift官方文档中对intializer有如下解释:
"Initialization involves setting an initial value for each stored property on that instance and performing any other setup or initialzation that is required before the new instance is ready for use."
意思是,在类的新实例可用之前必须执行构造过程,这个过程包括设置实例中每个存储属性的初始化,即类的每个属性包括@IBOutlet,在init()
阶段都必须被赋值。(具体可见两段式构造过程)
由于@IBOutlet对应的界面元素在loadView()
才会被加载,而loadView()
又是在init()
之后才执行,所以在Init阶段@IBOutlet还未被初始化。
由于UILable不能够被赋值为nil,因此需要定义为nil.
参考链接:https://www.jianshu.com/p/337e7036c818
原编辑时间 2020-11-24
相关文章
- Effective Java 第三版——22. 接口仅用来定义类型
- C#实现队列结构定义、入队、出队操作
- 加速融合弹性可控 浪潮软件定义存储(SDS)
- 还坐在办公室?软件定义工作空间改变办公模式
- 【Python基础】局部变量和全局变量的定义 || 局部变量的生命周期 || 全局变量的位置 || 使用全局变量的注意事项 || 修改全局变量的值 || 给全局变量命名的建议
- 第7.23节 Python使用property函数定义属性简化属性访问的代码实现
- 第7.10节 Python类中的实例变量定义与使用
- iOS 要定义自己的导航栏button样式Button Image 执行出彩是不一样的与原来的颜色 -解
- 自己定义Android Dialog
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- Android.mk中添加宏定义
- android在xml文件中定义drawable数组、id数组等