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 中可选标识符中感叹号的含义? [复制]的主要内容,如果未能解决你的问题,请参考以下文章