swift 中的可选属性
Optional properties in swift
如果我 属性 喜欢:
var animatedImagesView:JSAnimatedImagesView?
最终它会在适当的时间被初始化,当我想对它做些什么时,我是否需要继续使用 !
来解包它?例如:
self.animatedImagesView!.reloadData()
通常我会像这样打开可选值:
if let dailySleepTime:AnyObject = uw_JSON["daily_sleep_time"] {
self.settings.dailySleepTime = dailySleepTime as String
} else {
log.warning("\n Error finding attr in \(request)\n")
}
但我不能用同样的方式将我的属性转换为常量,对吗?我不是在抱怨,我只是想知道我是否正确使用感叹号。
而是声明如下:
var animatedImagesView:JSAnimatedImagesView!
隐式解包可选将避免不断"bang"取消引用它的需要,但要确保它在任何时候访问时都不会为 nil。
这是指定 IBOutlets 的好方法,您知道在使用它们之前总是会从 nib 或情节提要中对其进行初始化。
如果您在正确的时间初始化它(例如在任何生命周期方法中,或在相关的构造函数中),您可以只使用 !
而不是 ?
作为 属性声明。我自己通常只使用 ?
来表示我不一定知道在我的生命周期中始终有价值的东西。
如果您也属于后者,则您需要继续使用 ?
,因为您无法保证存储了值。如果对变量进行多次调用,还应该使用 if let myVar = myVar { .. }
语法。
一个选项是将 animatedImageView
定义为一个隐式展开的可选项,开头为:
var animatedImagesView: JSAnimatedImagesView!
这在 Interface Builder 中处理 Cocoa .nib 对象时很常见,因为 View 在从 .nib 中取消存档之前无法初始化,但您知道它总是会在之前初始化你用它。
我通常讨厌使用 !
,因为它是一个等待发生的运行时错误,但 IB 对象是少数几个使用它似乎既合法又必要的地方之一。否则,您的其他两个选项是您已经找到的选项 - 每次使用 if let...
展开它(这是最安全的,但在 a** 中很痛苦),或者每次都使用 !
你使用它,这并不比使用 !
开始声明它更安全。
如果我 属性 喜欢:
var animatedImagesView:JSAnimatedImagesView?
最终它会在适当的时间被初始化,当我想对它做些什么时,我是否需要继续使用 !
来解包它?例如:
self.animatedImagesView!.reloadData()
通常我会像这样打开可选值:
if let dailySleepTime:AnyObject = uw_JSON["daily_sleep_time"] {
self.settings.dailySleepTime = dailySleepTime as String
} else {
log.warning("\n Error finding attr in \(request)\n")
}
但我不能用同样的方式将我的属性转换为常量,对吗?我不是在抱怨,我只是想知道我是否正确使用感叹号。
而是声明如下:
var animatedImagesView:JSAnimatedImagesView!
隐式解包可选将避免不断"bang"取消引用它的需要,但要确保它在任何时候访问时都不会为 nil。
这是指定 IBOutlets 的好方法,您知道在使用它们之前总是会从 nib 或情节提要中对其进行初始化。
如果您在正确的时间初始化它(例如在任何生命周期方法中,或在相关的构造函数中),您可以只使用 !
而不是 ?
作为 属性声明。我自己通常只使用 ?
来表示我不一定知道在我的生命周期中始终有价值的东西。
如果您也属于后者,则您需要继续使用 ?
,因为您无法保证存储了值。如果对变量进行多次调用,还应该使用 if let myVar = myVar { .. }
语法。
一个选项是将 animatedImageView
定义为一个隐式展开的可选项,开头为:
var animatedImagesView: JSAnimatedImagesView!
这在 Interface Builder 中处理 Cocoa .nib 对象时很常见,因为 View 在从 .nib 中取消存档之前无法初始化,但您知道它总是会在之前初始化你用它。
我通常讨厌使用 !
,因为它是一个等待发生的运行时错误,但 IB 对象是少数几个使用它似乎既合法又必要的地方之一。否则,您的其他两个选项是您已经找到的选项 - 每次使用 if let...
展开它(这是最安全的,但在 a** 中很痛苦),或者每次都使用 !
你使用它,这并不比使用 !
开始声明它更安全。