如果我有如下财产:

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**中有一个问题)打开它,或者每次使用!打开它,这并不比开始使用!声明它更安全。

10-02 16:07