9 如何在Swift中使用Optional

简介: 如何在Swift中使用Optional

为什么需要Optional


  • Objective-C里的nil是无类型的指针
  • Objective-C里面的数组、字典、集合等不允许放入nil
  • Objective-C所有的对象变量都可以位nil
  • Objective-C只能用在对象上,而在其他地方又用其他特殊值(例如NSNotFound)表示值缺失


Optional


  • 通过在变量类型后面加?表示:
  • 这里有一个值,他等于x, 或者
  • 这里根本没有值
  • 你可以通过给可选变量赋值一个nil来将之设置为没有值
  • 在Objective-C中nil是一个指向不存在对象的指针
  • 在Swift中, nil不是指针,他是值缺失的一种特殊类型,任何类型的可选项都可以设置成nil而不仅仅是对象类型


image.png


Optional-If语句以及强制展开


  • 可选项是没法直接使用的
  • 需要用!展开之后才能使用(意思是我知道这个可选项里边有值,展开吧)


image.png


Optional-强制展开


  • 使用!来获取一个不存在的可选值会导致运行错误,在使用!强制展开之前必须确保可选项中包含一个非nil的值。


image.png


Optional-绑定


  • 可以使用可选项绑定来判断可选项是否包含值,如果包含就把值赋给一个临时的常量或者变量
  • 可选绑定可以与if和while的语句使用来检查可选项内部的值,并赋值给一个变量或者常量
  • 同一个if语句中包含多可选项绑定,用逗号分隔即可。如果任一可选绑定结果是nil或者布尔值为false,那么整个if判断会被看做false


image.png


Optional-隐式展开


  • 有些可选项一旦被设定值之后,就会一直拥有值,在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行展开
  • 通过在声明的类型后边添加一个叹号(String!)而非问号(String?)来书写隐式展开可以选项
  • 隐式展开可选项主要被用在Swift类的初始化过程中


image.png


Optional-可选链


  • 可选项后面加问号
  • 如果可选项不为nil,返回一个可选项结果,否则返回nil


image.png


Optional-实现探究


  • Optional其实是标准库里的一个enum类型
  • 用标准库实现语言特性的典型


image.png


  • Optional.none就是nil
  • Optional.some则包装了实际的值


image.png


  • 泛型属性unsafelyUnwrapped


image.png


  • 理论上我们可以直接调用unsagelyUnwrapped获取可选项的值


image.png






目录
相关文章
|
6月前
|
安全 Swift
Swift 语言:什么是可选类型(Optional)?如何处理可选类型的安全解包?
Swift的可选类型是处理值可能缺失的类,用?表示。它们能表示有值或无值状态。安全解包用`if let`或`guard let`避免崩溃,而强制解包`!`则风险较高,若值为`nil`会触发运行时错误。
47 0
|
Swift C++
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
343 0
Swift-进阶 10:可选类型Optional & Equatable+Comparable协议
|
Swift
Swift专题讲解十七——Optional链
Swift专题讲解十七——Optional链
123 0
|
安全 Swift iOS开发
swift4.1 系统学习九 Optional
// // main.swift // swift09 // // Created by iOS on 2018/9/29. // Copyright © 2018年 weiman. All rights reserved. // import Foundation // swift学习笔记9 /* Optional:可选类型 ? 可选类型是swift特色之一,也是很多初学者不适应的原因之一。
1015 0
|
Swift
SWIFT Optional Value
SWIFT中有一个类型定义叫可选值,在变量类型后面加一个?号即可定义一个类型为Optional Value的变量,当在使用变量时要用到强制解包!.  如在页面上有一个可选输入年龄的框,在接受数据的时间就可能要定义一个可选值的变量.
830 0
|
iOS开发 Swift 编译器
Swift 可选值(Optional Values)介绍
Optional的定义 Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil。
1063 0
|
4月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
142 3