美文网首页
每天学一点Swift----集合(二)

每天学一点Swift----集合(二)

作者: 冯可乐同学 | 来源:发表于2017-05-17 07:28 被阅读17次

三.字典:字典中以key-value的形式保存数据,所以同一个字典中key不能重复。

1.声明字典--两种方式

(1)适宜用泛型。

var myMap : Dictionary

(2)使用简化语法。

var scross : [String:Int]****中间是冒号,不是逗号

var helath : [String : String]

2.创建字典--两种方式

(1)使用Dictionary的构造器创建字典---init

init(minimumCapaity: = 2):创建一个至少包含minimumCapacity个key-value。

**** minimumCapacity的默认值是2。

举个栗子:

myDict = Dictionary()--使用默认的构造器

score = Dictionary(minimumCapacity : 5)

(2)使用简化语法

health = ["身高":"180", "体重":"80", "血压":"86/113", "呼吸":"56"]

vardict = ["one":1, "two",2 "three":3, "four":4]

*****可以看出,使用简化语法时,跟元组不同的地方是括号的区别。

四.使用字典

1.根据key访问对应的value:var value = health["呼吸"]---比Java中的getxxx方法方便很多。

2.访问不存在的key时会返回nil。

----推断出:当程序根据key访问字典中对应的value时,字典返回的并不是对应的value的类型,而是包含value的可选类型——这是因为字典并不确定访问的value是否存在,当key-value存在时返回对应的value,当key-value不存在时返回nil ----这一点比Java中健壮很多。

3.由于字典根据key访问时返回的是包含value的可选类型,因此程序需要对字典返回的value使用感叹号进行强制解析。---举个栗子:

var noExist : Int? = health["no"]

if noExist != nil

{

print(noExist!)---注意使用了感叹号进行强制解析

}else

{

print("this is a nil")

}

4.修改字典中元素:直接使用key就可以对元素进行修改,如果相应的key-value不存在,则会添加该key-value。

举个栗子:

health["身高'] = “190”//直接修改

health["睡眠"] = “良好”//进行添加

5. Swift还提供了updateValue()方法来修改字典中的元素,该方法的作用与直接修改相比,强大的一点是可以返回修改之前的value ----当然,返回的也是包含value的可选类型

举个栗子:

var result1 = dict.updateValue(10, forKey: "ten")//返回nil

var result2 = dict.updateValue(40, forKey: "four") //返回4

6.使用for-in遍历字典:for-in循环同样也可以用于遍历字典,每次都以元组都形式返回。

for (str, num) in dict

{

print("\(str)-->\(num)")

}

7.单独使用字典的keys或者values:如果程序中只需要字典的key集或value集,就直接使用字典的keys属性或者values属性,即可返回字典中所有的key或value,然后将它们包装成数组即可。

var keys = ArrAy(dict.keys)

var values = Array(dict.values)

8.字典的可变性:使用var声明的是可变的,使用let声明的是不可变的。

9.字典的修改:

(1)添加、修改:见4、5

(2)删除:removeValueForKey(key:KeyType):删除指定key对应的value,该方法返回包含value的可选类型。

removeAll(keepCapacity: bool = false):清空字典。其中keepCapacity参数指定是否保留字典底层的数据缓冲。不传入参数keepCapacity时默认为false;

(3)除此之外,Swift还允许将某个key对应的value赋值为nil来删除key-value对。----与removeValueForKey相比,这样比较方便,但是不能返回value,而removeValueForKey可以返回value。

五.集合的复制

1. Swift的集合都是结构体类型,这些结构体类型都是值类型的。

2.在值类型赋值或参数传递的时候会复制副本,所赋的值或传递的参数都是原数据的副本。

3.当集合进行复制时,集合所包含的数据是否也会进行复制取决于聚合所包含的数据类型:如果集合所包含的数据是值类型的,那么复制集合时,集合所包含的数据也会进行复制;如果集合包含的数据是引用类型的,那么集合复制时,程序只是复制集合所包含的引用—这些引用实际指向的对象并不会复制。

4.数组的复制:

例子1:var name = ["唐僧", "孙悟空", "猪八戒", "沙僧"]

var cp1 = name;

var cp2 = name;

name,cp1,cp2各自修改了内容之后会显示各自的结果,互不影响。

例子2:

class Person

{

var name : String

init(name : String)

{

self.name = name;

}

}

var persons = [Person(name:"唐僧"), Person(name:"孙悟空"), Person(name:"猪八戒"),

Person(name:"沙僧")]

var cp1 = persons;

var cp2 = persons;

不同于例子1,因为这里数组中的内容是引用(指针)类型,所以尽管复制了内容的副本,但是还是指向相同的对象,其中一个修改时,其他的数组中对应的值也会随着改变。

4.字典的复制:原理同数组的复制。

相关文章

  • 每天学一点Swift----集合(二)

    三.字典:字典中以key-value的形式保存数据,所以同一个字典中key不能重复。 1.声明字典--两种方式 (...

  • 每天学一点Swift----集合(一)

    1. Swift的集合是一种特别有用的工具。Swift提供了数组和字典两种集合类型来存储集合数据。数组用于按顺序存...

  • 每天学一点Swift----函数(二)

    三.函数类型 1. Swift的每个函数都有类型的,函数类型由函数的形参列表,返回值类型组成。 2.使用函数类型定...

  • 每天学一点Swift----闭包(二)

    七.闭包表达式 1.调用闭包(使用闭包返回值):闭包的本质是功能更加灵活的代码块,因此完全可以将闭包赋值给变量(联...

  • 每天学一点Swift----泛型(二)

    四.类型约束 1.虽然程序可以对泛型形参传入任何类型,但有时候为泛型形参增加某种特定的约束也是必要的。就像字典,D...

  • 每天学一点Swift----面向对象上(二)

    三.类和结构体 1. Swift的类和结构体高度相似,无论在定义语法上还是在用法上。 2.结构体和类的主要区别是:...

  • 每天学一点Swift----面向对象下(二)

    二.类的构造和析构 1.通过集成后,子类中不仅有父类中的存储属性,还有子类自己的存储属性。子类中的所有存储属性都必...

  • 每天学一点Swift----函数(一)

    1. Swift中支持嵌套函数。 2.与函数紧密相关的另一个概念是闭包,闭包的本质是匿名函数,闭包可以作为表达式,...

  • 每天学一点Swift----可选类型

    一.可选和nil 1.在任何类型的后面紧跟?即可表示它是可选类型。可选类型的变量可以用来处理“值缺失”的情况。 2...

  • 每天学一点Swift----闭包(三)

    八.捕获上下文中的变量和常量 1.闭包可以用访问或修改闭包所在上下文中的变量或常量(对于常量只是访问),这个过程被...

网友评论

      本文标题:每天学一点Swift----集合(二)

      本文链接:https://www.haomeiwen.com/subject/lzwrxxtx.html