Swift入门教程:基本语法(四)

可选类型

可选类型的使用场合

当一个值可能存在,可能不存在的时候,就用可选类型

比如查找字符k在某个字符串中的位置

如果字符串是"jake",说明k的位置存在,是2

如果字符串是"kate",说明k的位置存在,是0

如果字符串是"itcast",说明k的位置不存在

那么k的位置就应该用可选类型

可选类型的格式:类型名?

var kIndex : Int?

问号?表明kIndex的值是可选的,可能是一个Int,也可能值不存在

kIndex的值要么是Int类型,要么是nil(nil代表值不存在)

kIndex默认就是nil,因此上面的语句相当于

var kIndex : Int? = nil

可选类型的应用
 

String有个toInt方法,可以将字符串转为对应的整数

有些字符串能转成整数,比如"156",可以返回156

有些字符串不能转成整数,比如"itcast",无法返回整数

因此toInt方法的返回值是一个可选的Int类型(即Int?)

字符串能转成整数,比如"156",就返回156

字符串不能转成整数,比如"itcast",说明返回的整数值不存在,是nil

let num = "156".toInt() //
156

let num2 = "itcast".toInt() //
nil

注意:num和num2都是Int?类型,不是Int类型

可选类型的本质
 

nInt?其实是对Int的一层包装,它们是2种不同的数据类型

var num : Int? = 10

//
上面代码是将Int类型的10,包装成了Int?类型的数据

可选类型的注意点

注意

不能直接将可选类型赋值给具体类型

比如不能将Int?类型直接赋值给Int类型,原因如下

Int?是对Int的一层包装,它们是2种不同的数据类型

Int?都不确定有没有整数值

下面的写法是错误的

var num : Int? = 10

var numValue : Int = num // 这行会报错

相反,可以直接将Int类型赋值给Int?类型

下面的写法是正确的

var numValue : Int = 20

var num : Int? = numValue // 自动将Int包装成Int?

强制解包

在可选类型的后面加个感叹号!,就可以把可选类型(包装)的值取出来,赋值给具体类型

下面的写法是正确的

var num : Int? = 10

var numValue : Int = num!

// 将num中(包装)的值取出来,赋值给numValue

感叹号!相当于告诉编译器:我确定可选类型里面有值,可以将值取出来了

基本概念

解包:将可选类型(包装)的值取出来

强制解包:使用感叹号!将可选类型(包装)的值取出来

也有翻译为“拆包”

注意

如果可选类型(包装)的值不存在,仍然进行强制解包,会报一个错误

fatal error: Can‘t unwrap Optional.None

下面的代码是错误的

var num : Int?

var numValue = num! // 这行会报错

因此:在进行强制解包之前,一定要先检测可选类型(包装)的值是否存在

可选类型和if

可以使用if语句来检测一个可选类型(包装)的值是否存在

如果值存在,就返回true

如果值不存在,就返回false

let num = "156".toInt()

if num {

println("num的值是\(num!)")

} else {

println("num的值不存在")

}

可选类型的价值

可选类型让开发人员可以在程序运行时,检测一个值是否存在

然后使用代码来分别处理存在和不存在的情况

选择绑定

选择绑定的作用

用来确定一个可选类型(包装)的值是否存在

如果值存在,把该值赋给一个临时常量\变量

如果值不存在,就不创建任何临时常量\变量

选择绑定的概念

将可选类型(包装)的值有选择地赋给临时常量\变量

也可以称为“选择绑定解包”

选择绑定的使用场合

if\while语句

选择绑定的应用

1.if let num = "156".toInt()
{

2.   
println("num的值存在,是\(num)")

3.} else {

4.   
println("num的值不存在")

5.}

如果"156".toInt()的值存在

就把值赋给临时常量num,执行第1 ~ 3行的大括号之间的代码

如果"156".toInt()的值不存在

就不创建临时常量num,执行第3 ~ 5行的大括号之间的代码

注意

这里的num是Int类型,不是Int?类型

num的作用域是第1~3行的大括号之间,不能用在第3~5行的大括号之间

也可以用临时变量来存储

if var num = "156".toInt() {

} else { }

 

隐式解包
                     
                     
                 
  

默认情况下:如果想将可选类型(包装)的值赋给具体类型,比如将Int?的值赋给Int类型,需要使用感叹号!进行强制解包

var num : Int? = 10

var numValue : Int = num!

被声明为隐式解包的可选类型

不用进行强制解包

能够自动解包:自动把可选类型(包装)的值取出来赋给具体类型

如何声明一个隐式解包的可选类型

将 问号? 改为 感叹号! 即可

var num : Int! = 20

var numValue : Int = num      //
自动解包,不用再使用 ! 进行强制解包

// num是被声明为隐式解包的可选类型Int!

隐式解包的原理和应用
                     
                     
   

隐式解包的原理

相当于告诉编译器:这个可选类型的值一直都存在,绝对能取出里面的值

所以取值时不用手动加感叹号!,编译器会自动加上一个感叹号!

于是就完成了“自动解包”

隐式解包的应用

如果某个常量\变量的值,在有些情况下一定存在,就可以用隐式解包

比如银行卡的余额就可以声明为隐式解包的可选类型

只要开通了银行卡,银行卡的余额肯定有值,从0 ~ 无限大

如果没开通银行卡或者银行卡丢了,银行卡的余额就没有值,因为连卡都没有

时间: 2024-08-04 09:57:04

Swift入门教程:基本语法(四)的相关文章

Swift入门教程:基本语法大全

原文:Swift入门教程:基本语法大全       简介:                                                                                                                                                                                  什么是Swift                                  

Swift入门教程:基本语法(三)

打印输出 Swift提供了2个打印输出函数 println :输出内容后会自动换行 print :对比println,少了个自动换行的功能 示例 输出字符串 println("欢迎学习传智播客iOS学院Swift教程") var name = "传智播客iOS学院\n" print(name) 输出其他数据类型 var age = 7 println(age) println("我今年\(age)岁") 元组类型 什么元组类型 元组类型由 N个

Swift入门教程:基本语法(二)

数字格式 数字可以增加额外的格式,使它们更容易阅读 可以增加额外的零 0 let money = 001999           // 1999 let money2 = 001999.000   // 1999.0 可以增加额外的下划线 _ ,以增强可读性 let oneMillion1 = 1_000_000    // 1000000 let oneMillion2 = 100_0000      // 1000000 let overOneMillion = 1_000_000.000

Swift入门教程:基本语法(一)

      简介:                                                                                       什么是Swift Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为"雨燕",右上角的图标就是它的LOGO 跟Objective-C一样,可以用于开发iOS.Mac应用程序 苹果从2010年7月开始设计Swift语言,耗时4年打造 Swift的语法特点

Swift入门教程:基本语法(五)

断言 断言是一种实时检测条件是否为true的方法 如果条件为true,那么代码继续执行 如果条件为false,就抛出错误信息,直接终止程序的运行 断言的用法 使用全局的assert函数 passert函数接收一个Bool表达式和一个断言失败时显示的消息 assert(index >= 0, "index必须大于0") 如果index大于等于0,就继续执行后面的代码 如果index小于0,就抛出错误信息(下面的黑色字),直接终止程序的运行 assertion failed: ind

ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第四章_入门案例分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 入门案例分析 在第一章里,我们已经对ArcGIS系列软件的体系结构有了一个全面的了解,接下来在本章中,将通过一个案例来熟悉ArcGIS for Desktop的使用,从解决问题的过程中,逐渐适应ArcGIS桌面的界面和操作方式. 本章的练习数据是一个住宅小区的简单平面示意图,需要在已有的基础上把楼房的轮廓补充完整,并加以整饰,完成一幅地图. 1.1 打开地图文档并浏览

Swift 入门之简单语法(四)

函数 目标 掌握函数的定义 掌握外部参数的用处 掌握无返回类型的三种函数定义方式 代码实现 函数的定义 格式 func 函数名(行参列表) -> 返回值 {代码实现} 调用 let result = 函数名(值1, 参数2: 值2...) func sum(a: Int, b: Int) -> Int { return a + b } let result = sum(10, b: 20) 没有返回值的函数,一共有三种写法 省略 () Void func demo(str: String) -

Swift入门教程19-泛型

原创Blog,转载请注明出处 blog.csdn.net/hello_hwc 一 泛型的定义 和C++的类似,泛型定义了一种适用于任何类型的,可重用的代码,用一种抽象的方式来实现代码.Swift的Array和Dictionary都是用泛型来实现的,因为Array可以保存String类型的变量,也可以保存Int类型的. 举个例子 func swapTwoInts(inout a: Int, inout b: Int) { let temporaryA = a a=b b = temporaryA

Swift 入门之简单语法(一)

定义 let 定义常量,一经赋值不允许再修改 var 定义变量,赋值之后仍然可以修改 //: # 常量 //: 定义常量并且直接设置数值 let x = 20 //: 常量数值一经设置,不能修改,以下代码会报错 // x = 30 //: 使用 `: 类型`,仅仅只定义类型,而没有设置数值 let x1: Int //: 常量有一次设置数值的机会,以下代码没有问题,因为 x1 还没有被设置数值 x1 = 30 //: 一旦设置了数值之后,则不能再次修改,以下代码会报错,因为 x1 已经被设置了数