如果我有如下财产:
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")
}
但我不能用同样的方法把我的属性转换成常数,对吧?我不是在抱怨,我只是想知道我是否正确地使用了感叹号。
最佳答案
一个选项是将animatedImageView
定义为一个隐式展开的选项,开始于:
var animatedImagesView: JSAnimatedImagesView!
这在接口生成器中处理Cocoa.nib对象时很常见,因为视图只有在从.nib中取消归档后才能初始化,但您知道,在使用视图之前,它总是会被初始化的。
一般来说,我不喜欢使用
!
,因为它是一个等待发生的运行时错误,但是IB对象是少数几个使用它既合法又必要的地方之一。否则,您的另外两个选项是您已经找到的选项—每次使用if let...
(这是最安全的,但a**中有一个问题)打开它,或者每次使用!
打开它,这并不比开始使用!
声明它更安全。