【问题标题】:Meaning of exclamation mark in optional identifier in Swift? [duplicate]Swift 中可选标识符中感叹号的含义? [复制]
【发布时间】:2015-04-08 10:41:31
【问题描述】:

我知道用感叹号我可以打开一个可选值,这意味着我可以将可选类型转换为“普通”类型。但是在类型标识符中使用感叹号呢?即

@IBOutlet weak var back: UIButton!

为什么我需要!?没有! 意味着back 不能取零值,不是吗?因为Int i 意味着i 都不能取零值。但是为什么我需要在类型标识符中使用!

【问题讨论】:

  • 这个问题是重复的...但是为了记录,一般来说不应该使用!。通常只在 Xcode 为您生成代码或自动完成代码时使用它。
  • 考虑一个对象在构造和配置时可能具有 nil 属性,但之后是不可变和非 nil 的情况(NSImage 通常以这种方式处理,尽管在这种情况下它仍然有用有时会变异)。隐式展开的可选项会很好地清理其代码,安全性损失相对较低(只要有一个保证,它就是安全的)。见:stackoverflow.com/questions/24006975/…

标签: swift optional


【解决方案1】:

@IBOutlet 类型必须是可选的,否则编译器会抱怨 并非在所有初始化程序中都设置变量。 Swift 并不“知道”Interface Builder 是 在运行时提供视图;因此它会完成它的工作并引发构建错误 关于未提供的值。

【讨论】:

  • 我可以标记像这样在 viewDidLoad 中初始化但不在 init 方法中初始化的变量吗?
  • 是的,但是如果使用不当,使用隐式解包可选(!)是非常危险的,如果您尝试使用尚未初始化的变量,它将产生运行时异常。希望对您有所帮助。
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 2012-03-06
  • 2017-06-11
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多