Swift的可选类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于x"或者"那儿没有值"。
Swift语言定义后缀?
作为命名类型Opetional
的缩写,换句话说,以下两种声明是相等的。
var optionalInteger: Int?
var optionalInteger: Optional<Int>
在这两种情况下,变量都是可选整数类型。
Optional
是一个含有两种情况的枚举,none
和some(Wrapped)
,用来表示可能有或可能没有值。任何类型都可以明确声明为(或隐式转换)可选类型。

当声明一个可选类型的时候,要确保用括号给
?
操作符一个合适的范围。
//表示可选数组,元素类型为Int
var array :[Int]?;
//表示数组,元素类型为可选Int
var array1 :[Int?];
- 当声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为nil。
- 如果一个可选类型的实例包含一个值,你可以用后缀操作符
!
来访问这个值。 - 可以通过在想调用的属性、方法或下标的可选值后面放一个问号
?
,来定义一个可选链。就像是在可选值后面放一个叹号!
来强制解包它的值一样。它们的区别主要在于当可选值为空时,可选链式只会调用失败,然而强制解包会触发运行时错误。 - 可选链式调用的返回结果与原本的返回结果具有相同的类型,但是被包装成了一个可选值。例如使用可选链式调用访问属性,当可选链式调用成功时,如果属性原本的返回结果是
Int
类型,则会变为Int?
类型。
面试题
使用guard语句和避免使用强制解包来优化这个函数。
func divide(dividend: Double?, by divisor: Double?) -> Double? {
if dividend == .none {
return .none
}
if divisor == .none {
return .none
}
if divisor == 0 {
return .none
}
return dividend! / divisor!
}
前提条件可以使用guard语句。配合optional binding(可选绑定)
优化后
func divide(dividend: Double?, by divisor: Double?) -> Double? {
guard let dividend = dividend, let divisor = divisor, divisor != 0 else {
return .none
}
return dividend / divisor
}
网友评论