SwiftUI 学习笔记 02:复杂类型
万事开头难,加油!
数组
在Swift中数组可以用变量和常量,例如
1 | var city = ["Beijing", "Shanghai", "Guangzhou"] |
如果标记了数组类型,那么就需要加方括号来标记数组的类型。
1 | var city: [String] = ["Beijing", "Shanghai", "Guangzhou"] |
当然,常量也可以作为数组
1 | let city = ["Beijing", "Shanghai", "Guangzhou"] |
调用的时候用方括号从0调用
1 | city[1] |
对应的是Shanghai
注意:
- 1.如果你阅读不存在的项目,Swift就会崩溃。例如,尝试阅读
beatles[9]
不是一个好主意。 - 2.如果你使用类型注释,阵列都写在括号:
[String]
,[Int]
,[Double]
,和[Bool]
。 - 3.在使用数组时,数组的名称后最好带
s
例如cities``papers``numbers
等等,方便遍历数组是提取一个参数。
创建一个空数组
我们可以使用格式[<数据类型>]()
来创建一个空的数组。
1 | var city = [String]() |
集合(无序数组)
在Swift中可以使用Set()
包含数组来创建一个集合。例如:
1 | var city = Set(["Beijing", "Shanghai", "Guangzhou"]) |
那么city
对应的值有一种可能是Shanghai
,Beijing
,Guangzhou
。集合是无序的,所以不能使用数字调用。
集合中的值只能存在一次,相同元素会被隐藏。例如:
1 | var city = Set(["Beijing", "Shanghai", "Guangzhou","Shanghai", "Guangzhou"]) |
那么city
对应的值有一种可能是Shanghai
,Beijing
,Guangzhou
。集合中的值只能存在一次。
元组
1.元组不能够增加和删除项目,元素数量在创建时就已经固定。
2.元组不能够更改类型,元组类型在创建时就已经固定。
3.可以用数字和元素名称来进行检索。
1 | var music = (Lyricist: "FangWenshan", Composer: "LinMaike", Singer: "ZhouJielun") |
我想要调用音乐的作词人,我可以
1 | music.0 |
或者说
1 | music.Lyricist |
请记住,创建元组后可以更改其值,但不能更改值的类型。因此,如果你尝试将其更改
music
为(Lyricist: "FangWenshan", Composer: "LinMaike", Singer: 666)
,则会出现错误。
数组、集合、元组之间的区别
如果你需要一个类型、数量固定的一组数据或者每个项目都是固定和精确的,那么使用元组
1 | let music = (Rank: 1, Lyricist: "FangWenshan", Composer: "LinMaike", Singer: "ZhouJielun") |
如果你需要快速检索数据或者需要的数据是唯一不重复的值,使用集合
1 | let city = Set(["Beijing", "Shanghai", "Guangzhou","Shanghai", "Guangzhou"]) |
如果你需要一定顺序或要求有重复项的数据,使用数组
1 | var city = ["Beijing", "Shanghai", "Guangzhou"] |
字典
在Swift中字典的格式例如:
1 | let zhangHong = [ |
引号前面为标识符key
,引号后为数据,例如我想要调用first name
所对应的值,那么:
1 | zhangHong["first name"] |
注意:使用类型注释时,字典用括号括起来,在标识符和值类型之间用冒号表示。例如
[String: Double]
和[String: String]
。
字典的默认值
在请求字典的数据时,如果没有对应的key则请求得到的是nil
(完全没有),有的时候我们需要一个默认值来应对这种情况。例如:
1 | var favouriteColor = [ |
请求ZhangHong
的值:
1 | favouriteColor["ZhangHong"] |
对应输出:Black
请求Mike
的值:
1 | favouriteColor["Mike"] |
对应输出:nil
设置请求不到时默认值为White
1 | favouriteColor["Mike", default: "White"] |
创建空的字典
在创建空的字典时,可以用以下格式:
1 | var favouriteColor = [String: String]() |
我们可以添加一些条目,例如:
1 | favouriteColor["ZhangHong"] = "Black" |
同理,也可以创建一个空的数组。例如:
1 | let num = [Int]() |
但是如果创建一个集合,那么它的格式会变成:
1 | let num = Set<Int>() |
只有字典和数组是特殊的,其他都是使用<>
形式。当然,这个是通用形式,你可以将这种格式应用到字典或者数组。例如:
1 | var scores = Dictionary<String, Int>() |
注意在调用
Dictionary<String, Int>
时,中间的是逗号而不是引号,只有在直接使用方括号时才是引号。
枚举
类似于Excel的数据有效性。成功的避免了我们胡乱使用字符串的可能。例如:
1 | let coding = "Python" |
因为在2020年Python2已经停止了支持,所以Python和Python3想要表达的含义几乎相同,但是在Swift中他们是两个东西
如果使用枚举就不用担心这个事情,特别是多人协同的时候。例如:
1 | enum Language { |
调用的时候可以通过点记法:
1 | let coding = Language.Python |
枚举关联值
在枚举的时候我们可以添加一些细微的差别,例如:
1 | enum Party { |
这是一个完好的枚举,但是我们像添加一些关联信息,例如说话的人是谁,跑的人是谁。我们可以:
1 | enum Party { |
现在我们可以更加精确的添加一些差别:
1 | let case = Party.talking(people: "ZhangHong") |
枚举原始值
我们可以为枚举创建一个按照数字排序的内容,例如:
1 | enum Students:Int { |
Swift会自动为他们分配一个从0开始的数字,例如zhanghong对应的是数字0,我们也可以自己单独设置这个原始值,使用rawValue
来修改。
1 | let soul = Student.soul(rawValue: 9) |
我们还可以设置一个或多个的值,Swift会自动生成其他没有设置的值。例如:
1 | enum Students:Int { |
这意味着soul对应的值为4
总结
- 数组,集合,元组和字典可让你在单个值下存储一组项目。它们各自以不同的方式执行此操作,因此你使用哪种方法取决于所需的行为。
- 数组按添加顺序存储项目,并使用数字位置访问它们。
- 设置存储项目时没有任何顺序,因此你不能使用数字位置访问它们。
- 元组的大小是固定的,你可以在每个项目中附加名称。你可以使用数字位置或名称来读取项目。
- 词典根据键存储项目,你可以使用这些键读取项目。
- 枚举是对相关值进行分组的一种方式,因此你可以使用它们而不会出现拼写错误。
- 你可以将原始值附加到枚举,以便可以从整数或字符串创建它们,也可以添加关联的值以存储有关每种情况的其他信息。
参考资料
- 感谢你赐予我前进的力量