这一部分,主要讲Swift中创新的可选型(optionals)

一、概要

可选型是Swift创新的一种新的类型,首先看一下可选型的应用场景:

var errorCode : Int = 404

这时候errorCode的值是404,表示此时的错误状态码是404,当产生一种错误的时候就会获得其对应的errorCode,

但是如果没有错误那应该怎么办呢?

在C/C++和Java中我们会给errorCode赋值为0或者是null(其实null也就是0),但是我们怎么能够保证0不是一种错误的状态码呢?

Swift为了解决这一问题,提供了可选型(optionals)当这个值不存在的时候,我们用nil表示,

需要注意的是:

var errorCode : Int = 404

errorCode = nil

这是错误的,因为nil是一种特殊的类型,是不可以赋值给int型的变量的。

正确的操作是:

var errorCode : Int? = 404

errorCode = nil

添加一个?就对了,这时候Int?表示的是整型的可选型

需要注意的是,可选型不可以赋值给不可选型的变量。

二、可选型的解包

在使用可选型的时候,需要进行解包操作,有两种解包(unwrap)方式:

1)强制解包

var errorCode : Int? = 404

print(“The errorCode is”+errorCode!)

这种解包方式需要开发者保证errorCode的值不是nil,否则就会报错。

2)if-let解包

var errorCode : Int? = 404

if let errorCode = errorCode {

print(“The errorCode is”+errorCode)

}

建议采用这种方式,当出现多个量需要解包的时候:

if let errorCode = errorCode,

errorMessage = errorMessage{

}

三、optional Chaining

先看看应用环境:

var errorMessage : String? = “Not Found”

if let errorMessage = errorMessage{

errorMessage.uppercaseString

}

这种方式是错的,因为errorMessage是String而不是String?

如果要使用String的uppercaseString方法的话可以这样做:

errorMessage?.uppercaseString

或者

errorMessage!.uppercaseString(确定不是nil)

这里的返回类型也是一个可选型

如果errorMessage!.uppercaseString返回,再进行操作就类似一条chain。

四、nil coalesce

我们建议在声明变量的时候就给变量赋初值,但有时候,我们希望通过后面的逻辑判断之后再对变量进行赋值

这时候我们可以这样做:

var errorMessage : String? = nil

let message = errorMessage == nil ? “Not Found” : errorMessage

当然可以通过nil coalesce方式

var errorMessage : String? = nil

let message = errorMessage??“Not Found”

五、元组的可选型

var error1 : (errorCode : Int?, errorMessage : String?) = (404, “Not Found”)

其中errorCode和errorMessage是可选型,但是error1不是可选型

因此errorCode和errorMessage可以是nil,而error1不可以

var error1 : (errorCode : Int?, errorMessage : String?)? = (404, “Not Found”)

errorCode和errorMessage,error1就都是可选型了

六、隐式可选型

主要应用在函数的构造函数中

var errorMessage : String! = nil

!进行使用的时候可以不进行解包操作,但是必须确保不为nil

在使用的时候,构造函数可以这样定义,但是在后面会先赋值,再使用。

swft 语言 java_Swift语言中与C/C++和Java不同的语法(二)相关推荐

  1. swft 语言 java_Swift语言中与C/C++和Java不同的语法(一)

    ---恢复内容开始--- Swift作为苹果官方推出的IOS开发的推荐语言,在过去的几年间受到了越来越广泛的关注,其实编程的人都知道,不同的编程语言大同小异,掌握一门新的语言关键是了解它与其它语言不同 ...

  2. 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...

    初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...

  3. 函数用法r语言_R语言中的apply函数族

    前言 apply函数族是R语言中数据处理的一组核心函数,通过使用apply函数,我们可以实现对数据的循环.分组.过滤.类型控制等操作.但是,由于在R语言中apply函数与其他语言循环体的处理思路是完全 ...

  4. table是什么函数c语言,c语言中table的用法

    c语言中table的用法 c语言中table的用法的用法如下:1 说明1.1 RECORD定义记录数据类型. 它类似于C语言中的结构数据类型(STRUCTURE),PL/SQL提供了将几个相关的.分离 ...

  5. c语言memcopy_C语言中memcpy 函数的用法详解

    C语言中memcpy 函数的用法详解 memcpy(内存拷贝函数) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址 ...

  6. map函数作用c语言,c语言中map的用法:map基本用法

    c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...

  7. sleep函数的作用c语言,C语言中的sleep函数是什么意思【详细介绍】

    计算机知识:C语言中的Slee函数 Sleep函数简介: 函数名: sleep 功 能: 执行挂起一段时间 用 法: unsigned sleep(unsigned milliseconds); 在V ...

  8. div c语言,c语言中的div的用法是什么?

    c语言中的div的用法: 函数名: div 功 能: 将两个整数相除, 返回商和余数 用 法: div_t (int number, int denom); 程序例: # include #inclu ...

  9. python语言str_python语言中的str是什么意思

    python语言中的str是什么意思 发布时间:2020-07-15 10:35:17 来源:亿速云 阅读:472 作者:Leah 本篇文章给大家分享的是有关python语言中的str是什么意思,小编 ...

最新文章

  1. 【组队学习】【27期】青少年编程(Turtle)
  2. SAP PM 初级系列5 - 工作中心相关的配置
  3. shell编程开发应用指南
  4. 有关大型数据中心项目建设的常见问题
  5. Intellij idea 14 创建简单的Web项目
  6. 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec
  7. 对前端Jenkins自动化部署的研究
  8. Andorid Scrolling Activity(CoordinatorLayout详情)
  9. eclipse创建maven
  10. 微软发布ASP.NET 5路线图
  11. cad 计算机图库,CAD超级图库
  12. 2020非常全的接口测试面试题及参考答案-软件测试工程师没有碰到算我输!
  13. mac测试电池软件,BattMan(Mac电池监测软件) V1.6 Mac版
  14. excel合并两列内容_Excel 两列合并成一列,又一种快捷方法!
  15. 对数用计算机,如何使用计算器计算对数
  16. 【CDH】cdh 安装新节点卡在“Acquiring installation lock...“
  17. 如何解密Token?
  18. rabbitmq消息发送与接收stomp通道测试
  19. 超参数的选择与交叉验证
  20. 计算机二级是win7,计算机二级等考宝典

热门文章

  1. 电影职员表中英文正确翻译及介绍
  2. MYSQL存储过程保存数据
  3. 【进一步学习HTML】
  4. 将PDF1页分割为4页
  5. ACM算法之基础算法
  6. vfp体积计算机程序,2017计算机二级VFP复习:VFP程序设计基础
  7. 关于视频的链接src带有blob:http的视频如何下载的问题
  8. 在批处理中提升权限 (UAC开启状态下)
  9. DS300 DS400 如何用命令行方式恢复出厂设置
  10. 若依框架如何新建模块