swift - swift 中的可选属性

标签 swift properties option-type

如果我有这样的属性(property):

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!

这在 Interface Builder 中处理 Cocoa .nib 对象时很常见,因为 View 在从 .nib 中取消存档之前无法初始化,但您知道它总是会在您使用它之前进行初始化。

我通常讨厌使用 !,因为它是一个等待发生的运行时错误,但 IB 对象是少数几个使用它似乎既合法又必要的地方之一。否则,您的其他两个选项是您已经找到的选项 - 每次使用 if let... 展开它(这是最安全的,但在 a** 中很痛苦),或使用! 每次您使用它时,这并不比仅使用 ! 开始声明它更安全。

关于swift - swift 中的可选属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29216761/

相关文章:

javascript - 无法在 JavaScript 类中设置属性

ios - 代理的属性 "assign"和 "retain"

regex - 匹配带有可选字符的字符串

ios - 通过任意操作快速进行可选链接?

rust - 我如何借用选项中的项目或在没有时创建新项目?

ios - 获取从 Core Data 加载数据的具体值(value)?

ios - 如何存储大量字符串

ios - 自动将其中的自定义 UITableViewCell 和 Label 调整为文本

swift - 如何使用TableView滚动来隐藏UITableView标题和导航栏?

java - 适合商务人士的轻量级 java 属性 UI