Swift里的元组和可选类型

2023-11-04

元组(Tuples)

元组将多个值分组为一个复合值,元祖中的值可以是任何类型,而不比彼此相通。

定义一个元组

例:

let httpStatus = (statusCode: 200, description: "ok")

读取数据:

if httpStatus.statusCode == 200 {
// ...
}

元组作为函数的返回值

使用元组作为返回值,可以返回多个返回值,而且返回的多个值的类型不受限制。

元组作为函数的返回值,在接收端需要知道元组的每个元素的类型,从而不至于取值出错。

元组的适用范围

注意:元组适用于简单的一组数据,如果数据结构比较多,太过复杂的话,不建议使用元组,这时候使用类或者结构体来定义复杂的数据结构。

可选类型(Optionals)

在Objective-C中接触过Option,Swift中的Optionals好像和OC中的不太一样。

在Swift中的Optional,适用于缺省值的情况下。

Optional和Option还不是一个东西,Swift中的可选这个概念在C和OC中是没有的。在OC中与Swift的Optional比较相近的概念是将nil作为返回值。返回nil,表示没有有效的对象,nil只适用于对象,不适用于基本的数据结构或者枚举,基本数据返回nil时,往往会返回的是0。对于这些类型,在OC中一般是返回一个特定的值,例如枚举的话我们默认返回0,定义为xxxdefault、xxxNone等。

定义可选类型

let number : int ?

在数据类型后面添加一个问号,表示这是一个可选值类型。可能是int,也可能不是。

示例分析

let result: Int? = 30
print(result)

上面的代码,编译后会报如下警告:
Expression implicitly coerced from ‘Int?’ to ‘Any’
Provide a default value to avoid this warning
Force-unwrap the value to avoid this warning
Explicitly cast to ‘Any’ with ‘as Any’ to silence this warning

原因是编译器不知道result这个值到底是什么,因为它是一个可选类型。

系统给提供了三个处理警告的办法,点击fix即可

  1. 添加一个默认值
let result: Int? = 10
print(result ?? 0)

如果有值则是该值,如果没值,result是0。

  1. unwrap解包装
let result: Int? = 10
print(result!)

这种情况需要注意,当result被赋值为nil的时候,会闪退。

这里有一个问题就是 感叹号 在这里的作用。

let result: Int? = 10
print(result as Any)

这种做法个人感觉是比较好的,当result有值时就是被赋予的值,如果没值时候就是nil,也不会闪退。

Optional中使用nil

var serverResponseCode: Int? = 404

// serverResponseCode contains an actual Int value of 404

serverResponseCode = nil

// serverResponseCode now contains no value

注意:
Swift中的nil与OC中的nil不一样。OC中nil是指向不存在的对象的指针。在Swift中nil不是指针,是缺少某种类型的值,可以将任何类型的Optionals这是为nil,而不仅仅是对象类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift里的元组和可选类型 的相关文章

  • 通过示例理解数据库相关概念(一、关系,元组,域,键,笛卡儿积等等)

    出发点 数据中的各种定义实在看不下去 太离散数学了 只有直接看例子了 少牺牲点脑细胞 但是 没有了严谨的定义 很多东西就只可意味不可言传了 通过例子可以用来理解数据库的离散数学式的定义 例子 Stu表 学号 姓名 性别 班级 201901
  • Chapter Four : Python 序列之列表、元组操作详解合集

    目录 一 列表 1 列表基本操作 定义列表 删除列表 访问列表 遍历列表 2 列表常用方法及操作详解 2 1 添加元素 append extend insert 运算符 运算符 2 2 删除元素 del pop remove clear 2
  • Scala如何使用元组?用法代码实例

    Tuple是元素的集合 元组是异构的数据结构 也就是说 它们可以存储不同数据类型的元素 元组是不可变的 不像scala中的数组是可变的 存储整数 字符串和布尔值的元组的示例 val name 15 Chandan true 元组的类型由其所
  • 快速浏览Swift-笔记

    快速浏览Swift 笔记 快速浏览Swift https docs swift org swift book GuidedTour GuidedTour html 变量也常量 多行字符串 使用 let quotation I said I
  • Swift Property ‘self.xxx‘ not initialized at super.init call

    Swift重写父类的init方法时 报了如下错误 Property self xxx not initialized at super init call 大概意思是在调用父类init方法前 需要给属性赋值 报错代码 required in
  • Swift工程main函数去哪里了?

    有些东西很简单 但是我还是把它记录了下来 main 函数是所有应用程序的入口 C C Python等所有的应用程序都有且仅有一个main函数作为程序的入口 Swift创建一个新的工程 项目文件中怎么没有main 函数 用OC创建一个新项目后
  • iOS字典转成JSON换行符问题

    问题 使用系统框架将字典转成压缩转义后的JSON字符串 发现字符串中带有多个换行符 系统转JSON的方法如下 let json try JSONSerialization jsonObject with validData options
  • Swift 原生网络请求

    iOS HTTP请求原生组要的类是URLSession 是一个单例类 例1 GET func makeLogon 构建URL let url URL URL string https xxx xxx API xxx 发送HTTP请求的的se
  • iOS系统语音识别-Swift

    基于Speech框架 实现语音识别转文字功能 系统要求 gt iOS 10 以下是在官方提供的Demo基础上稍作改动 目的有两个 实现连续不间断地语音识别 除非自己手动调用停止 报错自动重新启动 应用切后台后再次进入前台后语音可以正常使用
  • Python之tuple添加元素及删除元素及修改元素的方式或方法(元组添加元素)

    标题误导了各位 我是故意这样做的 抱歉 一个tuple对象第一次创建后 再也无法原地改变自身持有的元素 希望大家记住这个知识点 所以才用标题误导大家进来 tuple的特点 1 不支持添加元素 增 2 不支持删除元素 删 3 不支持修改元素
  • Swift基础语法快速浏览

    有些东西很简单 但是我还是把它记录了下来 文章目录 推荐阅读 基础语法快速浏览 基础 值类型转化 控制流 方法 类和对象 枚举和结构体 协议和扩展 错误处理 泛型 推荐阅读 the swift programming language sw
  • 100天精通Python(基础篇)——第4天:数据类型

    作者介绍 Python领域优质创作者 数据开发工程师 励志成为Python全栈工程师 关注我发现更多精彩 本文已收录于Python全栈系列专栏 100天精通Python从入门到就业 欢迎订阅 订阅后可私聊进Python全栈VIP交流群 手把
  • Swift复写UIViewController的init方法

    在OC中我们直接复写 init 方法 instancetype initWithLeftViewController UIViewController leftViewController contentViewController UIV
  • iOS PopoverController

    iOS PopoverController 背景 UIPopoverController 在iOS9 0 已废弃 UIKIT EXTERN API DEPRECATED UIPopoverController is deprecated P
  • 列表和元组元素的增加

    对于列表 元素是可以改变的 可以直接用内置函数来实现 l t for i in range 50 l append i t i print l print t 元组元素可以拼接但是不能增删 对于元组 其元素是不可以直接增加 但是可以通过元组
  • Python——元组的基本语法(创建、访问、修改、删除)

    Python 元组的使用 Python 的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 gt gt gt tup1 Google Runoob 1
  • Swift 之 JSONEncoder 和 JSONDecoder

    Swift 之 JSONEncoder 和 JSONDecoder 摘自官方文档 A type that can convert itself into and out of an external representation Codab
  • Binary operator ‘==‘ cannot be applied to operands of type ‘Int‘ and ‘[Int]‘

    等号两边数据类型不一致进行比较报错 Binary operator cannot be applied to operands of type Int and Int 这个提示也挺明确 二元运算符 两边不能使用 Int 和 Int 写代码时
  • TypeScript基础之元组(Tuple)

    元组 我们知道数组中元素的数据类型都一般是相同的 any 类型的数组可以不同 如果存储的元素数据类型不同 则需要使用元组 元组是一种数据类型 可以像任何其他变量一样使用 它表示值的异构集合 也可以作为函数调用中的参数传递 在抽象数学中 术语
  • Error Domain=NSCocoaErrorDomain Code=3840 “Invalid value around character 4104.

    使用Alamofire发了一个GET请求 出现了如下错误 responseSerializationFailed reason Alamofire AFError ResponseSerializationFailureReason jso

随机推荐

  • Qt绑定UI界面和Qt类的四种方法

    1 Qt类头文件中 声明命名空间 namespace Ui class Widget 声明UI指针对象 public explicit Widget QWidget parent 0 private Ui Widget ui 源文件的构造函
  • webpack

    一 区别 前面两节我们有提到Loader与Plugin对应的概念 先来回顾下 loader 是文件加载器 能够加载资源文件 并对这些文件进行一些处理 诸如编译 压缩等 最终一起打包到指定的文件中 plugin 赋予了 webpack 各种灵
  • 拓世AIGC

    在 机器 自然力和科学的应用 一书中 马克思曾指出 火药 指南针 印刷术 这是预告资产阶级社会到来的三大发明 火药把骑士阶层炸得粉碎 指南针打开了世界市场并建立了殖民地 而印刷术则变成了新教的工具 这段话深刻阐释了科学技术对人类社会带来的深
  • 深度学习中的token和tokenization

    作为一名即将入学的研究生 在这个假期准备看一些论文为自己的科研做准备 结果刚开始就出现了停顿 在论文中出现了名词token 我无法对它做出很好的翻译 导致论文读不下去 网上对它的解释多种多样 经过查阅学习后 我的理解如下 我阅读的是英文文献
  • MySQL字符编码的修改及查看

    MySQL字符编码的修改及查看 1 修改MySQL的默认编码集 也称全局编码集 修改MySQL的全局配置文件 etc my cnf 在其中添加 character set server utf8 编码格式 collation server
  • C++11中Lambda表达式的基本用法和总结

    文章目录 前言 lambda的基本形式 lambda中的捕获列表 的常用方式 lambda表达式中mutable关键字 lambda作为形参传参的用法 前言 对于Lambda表达式 其实本质就是一个函数 其用法也和函数差不多 只不过它和函数
  • 简单了解JVM

    jvm作用 把一套程序在不同的平台上运行 可以实现自动的内存管理 自动的垃圾回收 jvm分为四大结构 1 类加载系统 负责从硬盘上加载字节码文件 2 运行时数据区 存储时的数据 分为栈 方法区 堆 本地方法栈 程序计数器 3 执行引擎 负责
  • Oracle入门笔记(二)——SQL Developer的基本使用

    Oracle各种连接和连接配置 1 Oracle自带SQL plus工具的使用 2 Navicat连接Oracle 3 SQL Developer连接Oracle 4 Oracle表空间 4 1永久表空间 4 2临时表空间 5 SQL De
  • 微信小程序实现画布生成海报功能

    微信小程序可以通过使用 标签来实现生成海报的功能 以下是基本实现步骤 1 在 WXML 文件中创建一个 标签 并设置其宽度和高度属性
  • MySQL磁盘使用率是什么_磁盘利用率和饱和度理解

    在这篇文章里 会介绍磁盘利用率 Utilization 和饱和度 Saturability 相关的知识 在之前的博客里面 我写了一些关于CPU使用率和饱和度之间有什么实质性不同 以及CPU使用率 饱和度如何从不同维度影响响应时间 RT 的文
  • lua 取一个数字的整数部分

    lua在对两个整数进行除法操作时不会向C那样将结果转换成整数 而是自动转换成浮点数 lua没有数据类型之分 如果要实现此功能需要取得结果中的整数部分 math ceil x Returns the smallest integer larg
  • Redis 持久化机制详解

    Redis是内存数据库 数据都是存储在内存中 为了避免进程退出导致数据的永久丢失 需要定期将Redis中的数据以某种形式 数据或命令 从内存保存到硬盘 当下次Redis重启时 利用持久化文件实现数据恢复 除此之外 为了进行灾难备份 可以将持
  • 首次进入小程序拒绝相机权限,再次允许camera组件显示不出来

    第一次进去拒绝授权开启摄像头后 再次进去允许授权 但是页面camera组件显示不出来 百度了一下 大家都说直接给camera组件写个显示隐藏 试过了 不是很理想 最终想到的解决办法 拒绝授权后进入的方法 官方的函数名 handleCamer
  • sqli-labs:less-21

    和20题很像 然后一看cookie是一个base64编码的 解码一下 是Dumb 所以cookie一个是注入点 只是有个base64编码 随便提一下 base32 只有大写字母和数字数字组成 或者后面有三个等号 base64 只有大写字母和
  • 【MATLAB】使用Classification Learner工具箱训练和预测数据

    近日对matlab内置的classification Learner 工具箱有所接触 现在整理一下关于使用该工具箱训练模型和预测数据的相关操作 一 原始数据 其中列向量为样本 行向量内为每个样本的6个特征 最后一列为样本的响应变量 即为样本
  • PyCharm社区版安装教程和环境配置及使用

    一 PyCharm官网下载 访问官网地址 https www jetbrains com pycharm 点击首页 Download 按钮 进入下载页面 选择Community下的 Download 如图 点击后进入 Thank you f
  • ntp服务器修改时区,部署ntp服务器笔记与时区的介绍与修改

    准备工作 server ip 10 1 1 119 client ip 10 1 1 56 关闭selinux vi etc selinux config SELINUX disabled 关闭iptables service iptabl
  • 时序分析基本概念介绍——SDC概述

    今天我们要介绍的时序概念是设计约束文件SDC 全称Synopsys design constraints SDC是一个设计中至关重要的一个文件 它对电路的时序 面积 功耗进行约束 它是设计的命脉 决定了芯片是否满足设计要求的规范 Timin
  • C++ vs2015编译json和protobuf报错nlohmann::detail::static_constnlohmann::detail::to_json_fn::value‘

    目录 问题描述 解决方案 参考连接 问题描述 补充 这个问题也会导致protobuf编译和使用报错 按照本方法修复后问题解决 只要引入项目中的 include nlohmann json hpp 用vs2015编译就会报错 甚至用vs202
  • Swift里的元组和可选类型

    文章目录 元组 Tuples 定义一个元组 元组作为函数的返回值 元组的适用范围 可选类型 Optionals 定义可选类型 示例分析 Optional中使用nil 元组 Tuples 元组将多个值分组为一个复合值 元祖中的值可以是任何类型