Day09:Swift 基础语法— Optional

前言

当我们处理来自外部数据源的数据时,
可能会遇到空的数据的情况。
我们需要一种方法表达一种可以为空的状态,
所以需要使用 optional。

Optional

  • 宣告一个变数 a 是 optional
// Implicitly Unwrapped OptionL
var a:Int! = nil
var a:Int!
// OptionL
var a:Int? = nil
var a:Int?

也可以分配给变数 a 值:

var a:Int! = 10
var a:Int? = 20

实作

  • 隐式解包
    打开 playground:

    Xcode 提示出现 error,
    要预防这种情况出现
    我们要在使用之前检查变数 a 的值是否为 nil:

    使用隐式解包,
    Xcode 不会提示我们,
    也不需要再次解包。
    使用隐式解包要记住变数 a 是 optional,
    如果 code 很长,
    这就要取决於记忆力了,
    所以这个方法不太安全,
    所以也不太常用。
  • 解包
    宣告一个变数 c 是 optional:
var c:Int? = nil

在 playground 中打开:


Xcode 提示必须打开这个可选的变数 c 来得到值。
所以使用解包,
Xcode 会提示我们该变数可能含有 nil,
需要解包它来获得值。

  • Optional Binding
    可选绑定是一种检查可选变数是否为 nil 的安全检查方式:


    这个可选绑定检查了变数 c 不是 nil,
    并把变数 c 的值1分配给常数 y。
  • Optional Chaining
    可选链接处理 struct 和 class 的实例:

    可以发现使用 ! 强制打开这个 optional 会 crush,
    这里使用 ? 就可以了:

<<:  离职倒数7天:让人感觉自在,不是要说什麽动听的话,而是要把持住不要讲出讨人厌的话

>>:  day9_MacOs ARM 的剪辑工作之旅

Day28-"练习-3"

倒数第三篇了! GO!GO!GO! 今天一样来练习CPE曾经出过的一题题目 A同学喜欢奇数。某一天,...

【从实作学习ASP.NET Core】Day09 | 後台 | 图片上传与预览

接续昨天的 Create 页面,今天要完成图片上传和预览的功能 图片上传到资料库的方法据我所知有两种...

【Day 13】- 用 JSON 储存爬来的 PTT 文章。(实战 PTT 爬虫 3/3)

前情提要 前一篇文章带大家写了能爬取持续爬取 PTT 文章的爬虫。 开始之前 本篇将继续带各位写 P...

给别人前先包装:套件、汇入、存取修饰词 Packages, imports and Visibility modifiers

「如果有一天,我也写函式库,要怎麽分享呢?」诗忆好奇的问。 唯心笑了笑。「首先要先定义package...

[DAY 14] 轮回故事里的那些因果 : RNN 简介

前言 这一场 LOL 的掉排位来自於之前自己已经雷了千万场 ---阿峻20190928 在资料的世界...