黑马程序员——Swift学习笔记:高级类型

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


参考书:《Swift基础教程》Boisy G.Pitre 著

一、可选类型


可选是一种类型的修饰符,允许某个类型的变量的值为空值nil

C语言和C++中的空值是NULL,Objective-C中nil表示空指针,Swift中nil表示值缺失。

声明格式:
显式可选类型:在声明的类型后面加上?
隐式可选类型:在声明的类型后面加上!

例如:
var a:Int?
var b:Double!
没有初始化值的可选类型变量的初始化的值是nil,因此a和b的值是nil。


显式可选类型和隐式可选类型的区别在于:当需要获取可选类型的值时,显式可选类型需要使用!强制解析,而隐式可选类型会自动解析。
因此, 显式可选类型用于声明值有可能重新变为nil的变量,隐式可选类型用于声明,一旦赋值后就不会再变为nil的变量。
同时, 最好在获取可选类型的值之前使用if语句判断来排除nil值,以防运行错误。
任何类型都可以声明为可选。

二、元组


Swift允许将基本类型组合在一起形成单个实体,即 元组(Tuple)

元组的声明

元组使用括号包含基本类型的成员,使用逗号分隔
Swift可以根据每一个元组成员的值确定它的类型
例如:
var student=(20,200912028,"M")

可以声明每一个成员的具体类型来确定元组的类型
例如:
var student:(Int,UInt,Character)

元组中的元素可以具有自己的标签值,便于访问
例如:
var student:(age:Int,number:UInt,gender:Character)

元组自身也可以作为成员进入更大的元组。
例如:
var score:(math:Double, verbal:Double)
var student:(age:Int,number:UInt,exam:score)

元组的赋值

没有标签的元组需要按照元组的格式,根据各成员的类型依次赋值,也可以在声明元组的时候使用类型推断赋值
例如:
var student:(Int,UInt,Character)
student=(20,200912028,"M")

var student=(20,200912028,"M")

有标签的元组可以根据标签的值乱序赋值
例如:
var student:(age:Int,number:UInt,gender:Character)
student=(gender:"M",age:20,number:200912028)

元组的访问

没有标签的元组使用点语法和数字下标访问,数字下标表示成员的顺序,从0开始
例如:
var student=(20,200912028,"M")
println(\(student.0),\(student.1),\(student.2))

元组中包含元组时,点语法可以嵌套使用
例如:
var score:(math:Double, verbal:Double)
var student:(age:Int,number:UInt,exam:score)
student=(20,200912028,(98.5,99.5)
println(\(student.0),\(student.1),\(student.2.0),\(student.2.1))

元组的拆分

元组本身可以作为值,赋值给由变量组成的类型一致的元组
例如:
var student=(20,200912028,"M")
(age,number,gender)=student
其中的变量类型依次为元组成员的类型

需要忽略部分成员的值的时候,可以使用下划线占位
例如:
var student=(20,200912028,"M")
(age,_,gender)=student

对于元组,我个人的理解是, 它提供了类似于数据库操作的性能和格式

三、数组


类型相同,意义相关的值的组织形式。

数组的声明

一维数的声明:
泛型语法:
Array<类型>
Array其实是一种结构体,它提供了2种构造器:生成空数组和生成n个相同初始化值的数组
例如:
var empty=Array<Int>()  //创建Int类型的空数组
var nums=Array<Int>(count:10,repeatedValue:0)  //创建10个初始化值为0的Int型数组
其中count:和repeatedValue:是固定的语法格式
简化语法:
[类型]
初始化值使用枚举的方式给出,用逗号间隔,用中括号包含
例如:
var oneTwoThree:[String]=["One',"Two","Three"]

多维数组的声明
使用嵌套的方式声明
例如:
二维数组:
泛型语法:
var 数组名:Array<Array<类型>>
简化语法:
var 数组名:[[类型]]
三维数组:
泛型语法:
var 数组名:Array<Array<Array<类型>>>
简化语法:
var 数组名:[[[类型]]]

数组的引用

格式与许多其它编程语言相同:
数组名[下标值]

数组的操作

末尾追加
使用append方法追加新元素:
数组名.append(新的元素)
例如:
oneTwoThree.append("Four")

合并数组
与字符串连接类似,Swift提供了加号运算符方法:
数组名+=追加的数组
例如:
oneTwoThree+=["Five","Six","Seven"]

指定位置插入
使用insert方法:
数组名.insert(新增的元素,atIndex:插入位置的下标)
例如:
oneTwoThree.insert("Zero",atIndex:0)
插入位置的小标不能超过数组的长度
插入完成后,该下标的位置元素即为新增的元素,原来的元素及之后的元素依次向后位移1

元素替换
单个元素替换:
与其它编程语言类似,引用元素并重新赋值即可

范围元素替换:
引用的下标可以作为范围使用,这种替换将清空该范围的元素,并根据替换的值的数量自动调整数组的长度
例如:
oneTwoThree[5...7]=["5","6","7","8","9"]
此时数组的下标5到7的3个单词被删除,同时新增了5个数字
oneTwoThree[0..<5]=[".0","1","2","3","4"]
该引用是闭区间[0,5)的元素,把单词替换成了数字
这种替换可以用于清空数组
例如:
items[0..<items.count]=[]

元素删除
删除末尾的元素:
数组名.removeLast()

定点清除:
数组名.removeAtIndex(删除位置的下标)
删除完成后,该位置后面的元素会依次向前位移1

清空数组:
数组名.removeAll(是否保留为数据缓冲)
希望保留为数据缓冲时该值为true,不希望保留为数据缓冲时该值为false或者省略

四、字典


具有映射关系的数据,包括索引值(key)和数据值(value),其中 索引值用于搜索查找,因此需要保持唯一性,在字典中不可以重复
因为字典是保存具有映射关系的数据,所以索引值和数据值都不可以为nil

字典的声明

泛型语法:
var 变量名:Dictionary<索引值的类型,数据值的类型>
生成方法是
变量名=Dictionary<索引值的类型,数据值的类型>(minimumCapacity:至少包含的数据条目数)
minimumCapacity:表示字典的最小空间,省略时的默认值是2

简化语法:
用中括号包含,用逗号间隔,用冒号分隔索引值和数据值,用枚举的方式赋值
例如:
var health=["身高":"178","体重":"74","血压":"86/113"]
简化语法还可以创建空字典
例如:
var emptyDictionary:[String:Double]=[:]
创建空字典时赋值时冒号不能省略,可以使用isEmpty方法检查字典是否为空

字典的操作

查找条目:
使用索引值进行查找。
例如:
var value:Int?=testDictionary["testKey"]
var price:Int=testDictionary["notNil"]!
获取字典的数据值的查找有可能因索引值不存在而失败,因此在查找操作中获取的返回值都是可选类型的,在确定索引值存在的情况下,可以对查找的结果强制转换以获得确切值。

增加与修改条目:
使用索引值进行重新赋值。
例如:
testDictionary["newKey"]="newValue
当索引值不存在时,此操作为新增条目;当索引值已经存在时,此操作为修改条目的数据值

删除条目:
定点清除:
字典名.removeValueForKey(索引值)

清空字典:
字典名.
removeAll(是否保留为数据缓冲)
希望保留为数据缓冲时该值为true,不希望保留为数据缓冲时该值为false或者省略

提取索引值和数据值
字典中的全部索引值或数据值可以单独提取出来包装成数组使用
使用Array(字典名.keys)可以提取出索引值的数组
使用Array(字典名.values)可以提取出数据值的数组
例如:
var keys=Array(testDictionary.keys)
var valuess=Array(testDictionary.values)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值