选配斯威夫特可以在第一混乱,但它有助于记住,他们只是一个枚举,如:
enum Optional<T> {
case None
case Some(T) // swift enums can have data associated to them
}
如果您确定您的选购有非零值,即,它是一个.Some
,您可以通过感叹号!
运算符来访问此基础值。
总之,力量解包optional!
说:“好吧,我确定这个可选包含非无值,给我。”
这就是所谓的强力展开。您正在告诉系统访问对应于.Some(T)
的值,但您并未检查您的可选项是否为.Some
或.None
。如果你强制解开与!
和你的可选结果是.None
,你会得到运行时错误,你得到unexpectedly found nil while unwrapping an Optional value
。
作为一个经验法则,你应该总是检查你的optionals之前解开它们。在少数情况下,您应该假设可选非零和强制展开它。例如,如果您尝试在prepareForSegue
中访问它,则即使是IBOutlet
也可能是nil
。 XCode自动使插座隐含地解开,因为对于您的大多数视图控制器的生命周期,它们不会是无。但你仍然必须照顾自己的这些不常见的边缘情况,他们是无。
您可以检查一个可选的具有非零值与
if optional != nil {
// force-unwrapping after nil check is fine
optional!.someMethod()
} else {
// 'optional' is nil
}
的标准方式更地道的方式与迅速做到这一点是通过可选结合。
// binds the constant 'value' to your optional if it is non-nil
if let value = optional {
value.someMethod()
} else {
// optional is nil
}
的第三种方式是检查与后卫陈述。 守护语句的语义与前面的有所不同。您还可以混合使用警戒语句和可选绑定。
guard optional != nil else {
// optional is nil.
// by the end of this branch you must exit the block that
// encloses the guard statement, such as with a return or break
return
}
// if control reaches here you're guaranteed optional is non-nil
卫队声明都在迅速整齐的功能,因为你可以专注于你想要的条件,而不是你不想要的东西。它还保留处理违反要求的代码,以满足相应的要求。与做相同的事情,如果发言,后卫通过使您的意图明确提高可读性。
要了解更多,请参阅swift documentation的基础部分。
只是返回零。 Swift惯例是用小写的第一个字母来命名你的方法 –