Swift学习07:Optional的使用

张建 lol

为什么需要 Optional?

  • Object-C 中用 nil 表示 指向不存在对象的指针,其他地方用 NSNotFound 表示 值缺失

  • Swift 中用 可选(Optional) 类型表示 值缺失,只有可选类型才能设置为 nil

  • Optional 含有两种枚举,NoneSome(T),用来表示可能有值或可能没有值。

示例

1
2
var optionalInteger: Int?
var optionalInteger: Optional<Int>

Optional

  • 通过在 变量类型 后面加 ? 表示这里有一个值,它等于 x,或者这里根本没有值

  • 你可以通过给可选变量赋值一个 nil 来将之设置为没有值

    • Object-Cnil 是一个 指向不存在对象的指针

    • Swift 中,nil 不是指针,它是 值缺失的一种特殊类型,任何类型的可选项都可以设置成 nil 而不仅仅是对象

      • 只有 可选类型 才能设置为 nil
1
2
var str: String = nil
var str1: String? = nil

Optional-If 语句以及强制解包

  • 可选类型 是没法直接使用的

  • 需要用 !强制解包 后才能使用(意思是我知道这个可选项里面有值,使用吧)

1
2
var str: String? = "abc"
let count = str.count

需要改成如下代码,才能正确执行

1
2
var str: String? = "abc"
let count = str!.count

1
2
3
4
var str: String? = "abc"
if str != nil {
let count = str!.count
}

Optional-绑定

  • 可以使用 可选绑定 来判断可选项是否包含值,如果包含就把赋值给一个临时的 常量或变量

  • 可选绑定可以与 ifwhile 的语句使用来检查可选项内部的值,并赋值给一个变量或常量

  • 同一个 if 语句中包含多可选项绑定,用逗号分割即可。如果任一可选绑定结果是 nil 或者 布尔值false ,那么整个 if 判断会被看做 false

1
2
3
4
5
var str:String? = "abc"
if let actualStr = str {
let count = actualStr.count
print(count)
}

Optional - 隐士解包

  • 有些可选项一旦被设定值之后,就会一直拥有值,在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行解包

  • 通过有 声明的类型后边添加一个叹号(String!)而非问号(String?)来书写 隐士解包 可选项

1
2
3
var str:String! = "abc"
let count = str.count
print(count)

  • 隐士解包可选项主要被用在Swift 的初始化过程中

Optional-可选链

  • 可选项后面加问号

  • 如果可选项不为nil,返回一个可选项结果,否则为nil

1
2
3
var str:String? = "abc"
let count = str?.count
let lastIndex = count - 1

将上面的代码改为:

1
2
3
4
5
6
7
var str:String? = "abc"
let count = str?.count
//let lastIndex = count - 1
if count != nil {
let lastIndex = count! - 1
print(lastIndex)
}

  • Post title:Swift学习07:Optional的使用
  • Post author:张建
  • Create time:2023-02-22 02:55:20
  • Post link:https://redefine.ohevan.com/2023/02/22/Swift课程/Swift学习07:Optional的使用/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.