Swift 中可选标识符中感叹号的含义? [复制]

Posted

技术标签:

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

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

@IBOutlet weak var back: UIButton!

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

【问题讨论】:

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

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

【讨论】:

我可以标记像这样在 viewDidLoad 中初始化但不在 init 方法中初始化的变量吗? 是的,但是如果使用不当,使用隐式解包可选(!)是非常危险的,如果您尝试使用尚未初始化的变量,它将产生运行时异常。希望对您有所帮助。

以上是关于Swift 中可选标识符中感叹号的含义? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Swift5.4 中可选的误报

swift中可选变量的冗余 - 有没有优雅的解决方案?

如果在 swift 3.1 中可选绑定到 any 时如何使用 if let

Swift 类型推断需要问号或感叹号

swift之?和!的含义(转)

Swift:如果变量 a 是非可选的,那么为啥变量 b 是可选的? [复制]