林奇定律说:“当事情变得艰难时,所有人都会离开。(when the going gets tough, everyone leaves.)”任何人都可以完成课程的第一天,但是要努力回到第二天需要付出努力——坚持下去做得很好!
昨天我们研究了简单的数据类型——具有一个值的类型,例如单个数字或单个字母字符串。今天,我们正在转向具有多个值或不是那么简单的复杂类型。
在不同的时候,您可能会想“我真的需要知道这一点吗?”答案是肯定的,如果他在这门课程里,您绝对需要知道它!
今天,您有11个一分钟的视频可供观看,并且您将遇到数组,字典和枚举之类的内容。观看完每个视频后,我们会进行一次简短的测试,以帮助您了解所教的内容。
1. 数组 Arrays – test
数组是存储为单个值的值的集合。例如,John,Paul,George和Ringo是名称,但是数组使您可以将它们分组为一个名为The Beatles的单一值。
在代码中,我们这样写:
let john = "John Lennon"
let paul = "Paul McCartney"
let george = "George Harrison"
let ringo = "Ringo Starr"
let beatles = [john, paul, george, ringo]
最后一行构成数组:它以方括号开头和结尾,数组中的每个项目均以逗号分隔。
您可以通过在方括号内写一个数字来从数组中读取值。数组位置从0开始计数,因此,如果您想阅读“ Paul McCartney”,可以这样写:beatles[1]
请注意:如果您读取不存在的项目,Swift就会崩溃。例如,尝试获取beatles[9]
就是个坏主意。
注意:如果使用类型注释,则将数组写在方括号中:[String]
,[Int]
,[Double]
和[Bool]
例如:
let beatles: [String] = [john, paul, george, ringo]
2. 集合 Sets – test
集合是值的集合,就像数组一样,区别在于它们有两个区别:
1.值不会以任何顺序存储;它们以高效的随机顺序存储。(无序)
2.一个值不能出现两次。所有项目必须唯一。(值唯一)
您可以直接从数组创建集,如下所示:
let colors = Set(["red", "green", "blue"])
当您查看playground输出中的colors
值时,您会发现它与我们用来创建它的顺序不匹配。它并不是真正的随机顺序,只是无序的– Swift无法保证其顺序。由于它们是无序的,因此无法像使用数组一样使用数值位置从集合中读取值。
如果您尝试将重复项插入到集合中,则重复项将被忽略。例如:
let colors2 = Set(["red", "green", "blue", "red", "blue"])
最终的color2
集合仍将仅包含 red,green 和 blue 各一次。
3. 元组 Tuples – test
元组允许您将多个值一起存储在一个值中。这听起来像数组,但是元组不同:
1、您无法在元组中添加或删除项目;它们的大小是固定的。
2、您无法更改元组中的项目类型;它们始终具有与创建时相同的类型。
3、您可以使用数字位置或命名它们来访问元组中的项目,但是Swift不允许您读取不存在的数字或名称。
通过将多个项目放在括号中来创建元组,如下所示:
var name = (first: "Taylor", last: "Swift")
然后,您可以使用从0开始的数字位置访问或者使用其名称访问项目:
name.0
//或
name.first
请记住,创建元组后可以更改其值,但不能更改值的类型。因此如果你想把name
改成(first: "Justin", age: 25)
将会报错。
4. Arrays vs sets vs tuples – test
数组,集合和元组乍一看似乎很相似,但是它们有不同的用途。为了帮助您知道要使用哪个,这里有一些规则。
如果您需要一个特定的,固定的相关值集合,其中每个项目都有一个精确的位置或名称,则应使用一个元组:
let address = (house: 555, street: "Taylor Swift Avenue", city: "Nashville")
如果您需要一个必须唯一的值的集合,或者需要能够非常快速地检查其中是否有特定项目,则应使用一组:
let set = Set(["aardvark", "astronaut", "azalea"])
如果您需要一个可以包含重复项的值的集合,或者项目的顺序很重要,则应使用一个数组:
let pythons = ["Eric", "Graham", "John", "Michael", "Terry", "Terry"]
到目前为止,数组是这三种类型中最常见的。
5. 字典 Dictionaries – test
字典就像数组一样是值的集合,但是您不必使用整数位置存储东西,而是可以使用所需的任何内容来访问它们。
存储字典数据的最常见方法是使用字符串。例如,我们可以创建一个字典来存储歌手的身高,并使用他们的名字:
let heights = [
"Taylor Swift": 1.78,
"Ed Sheeran": 1.73
]
就像数组一样,字典以方括号开头和结尾,并且每个项目都以逗号,
分隔。但是,我们也使用冒号:
将要存储的值value
(例如1.78)与要存储在其下的标识符key
(例如“ Taylor Swift”)分开即 key: value
。ps: 一般情况下,冒号和value
值有一个空格,(非必须)。
这些标识符称为键keys
,您可以使用它们从字典中读回数据:
heights["Taylor Swift"]
注意:使用类型注释时,字典用括号括起来,在您的标识符和值类型之间加冒号。例如,[String:Double]
和[String:String]
。
6. 字典默认值 Dictionary default values – test
如果您尝试使用一个不存在的键从字典中读取一个值,Swift会返回nil
——没有任何值。尽管这可能是您想要的,但还有另一种选择:我们可以为字典提供默认值,以供我们在需要缺少键的情况下使用。
为了说明这一点,让我们为两个人创建一个喜爱的冰淇淋字典:
let favoriteIceCream = [
"Paul": "Chocolate",
"Sophie": "Vanilla"
]
我们可以这样阅读保罗最喜欢的冰淇淋:
favoriteIceCream["Paul"]
但是,如果我们尝试为夏洛特(Charlotte)读取最喜欢的冰淇淋,我们将得到nil
,这意味着Swift对该键没有任何值:
favoriteIceCream["Charlotte"]
我们可以通过将字典的默认值设置为“Unknown”来解决此问题,以便在未找到夏洛特最爱的冰淇淋时,返回“Unknown”而不是nil
:
favoriteIceCream["Charlotte", default: "Unknown"]
7. 创建空集合 Creating empty collections – test
数组,集合(sets)和字典称为集合(collections),因为它们将值集中在一起。
如果要创建一个空集合,只需写出它的类型,然后加上和关闭括号即可。例如,我们可以创建一个空字典,其中包含用于键和值的字符串,如下所示:
var teams = [String: String]()
然后,我们可以添加条目,如下所示:
teams["Paul"] = "Red"
同样,您可以创建一个空数组来存储整数,如下所示:
var results = [Int]()
创建一个空集,通过不同的方式完成:
var words = Set()
var numbers = Set()
这是因为Swift仅对字典和数组具有特殊的语法;其他类型必须使用尖括号语法(例如set)。
如果需要,可以使用类似的语法创建数组和字典:
var scores = Dictionary()
var results = Array()
8. 枚举 Enumerations – test
枚举(Enumerations
)(通常写为 enums
)是一种定义一组相关值的方式,使它们更易于使用。
例如,如果您想编写一些代码来表示正在执行的某些工作的成功或失败,则可以将其表示为字符串:
let result = "failure"
但是,如果有人不小心使用了不同的命名会怎样?
let result2 = "failed"
let result3 = "fail"
这三个都是不同的字符串,因此它们的含义不同。
使用枚举,我们可以定义一个可以是success
或failure
的Result
类型,如下所示:
enum Result {
case success
case failure
}
现在,当我们使用它时,我们必须选择以下两个值之一:
let result4 = Result.failure
这样可以防止您每次意外使用不同的字符串。
9. 枚举关联值 Enum associated values – test
除了存储简单值之外,枚举还可以存储附加到每种情况的关联值。这使您可以将附加信息附加到枚举,以便它们可以代表更多细微差别的数据。
例如,我们可以定义一个存储各种活动的枚举:
enum Activity {
case bored
case running
case talking
case singing
}
这可以让我们说某人正在讲话,但是我们不知道他们在说什么,或者我们可以知道某人正在奔跑,但是我们不知道他们正在奔向哪里。
枚举关联值使我们可以添加以下其他详细信息:
enum Activity {
case bored
case running(destination: String)
case talking(topic: String)
case singing(volume: Int)
}
现在我们可以更精确了——我们可以说有人在谈论足球:
let talking = Activity.talking(topic: "football")
10. 枚举原始值 Enum raw values – test
有时您需要能够为枚举赋值,以便它们具有含义。这使您可以动态创建它们,并以不同方式使用它们。
例如,您可以创建一个Planet
枚举,为每种情况存储整数值:
enum Planet: Int {
case mercury
case venus
case earth
case mars
}
Swift会自动为每个数字分配一个从0开始的数字,您可以使用该数字创建适当的枚举大小写的实例。例如,地球将被赋予数字2,因此您可以这样编写:
let earth = Planet(rawValue: 2)
如果需要,可以为一个或多个案例指定一个特定的值,Swift会生成其余的案例。我们认为earth
是第二个行星不是很自然,所以您可以这样写:
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars
}
现在,斯威夫特将把1赋给mercury
,并从那里向上计数,这意味着earth
现在是第三颗行星。
11. 复杂类型:总结 Complex types: Summary – test
您已经完成了本系列第二部分的结尾,所以让我们总结一下:
1、数组,集合,元组和字典可让您在单个值下存储一组项目。它们各自以不同的方式执行此操作,因此您使用哪种方法取决于所需的行为。
2、数组按添加顺序存储项目,并使用数字位置访问它们。
3、集合存储时没有任何顺序,因此您无法使用数字位置访问它们。
4、元组的大小是固定的,您可以在每个项目中附加名称。您可以使用数字位置或名称来读取内容。
5、词典根据键存储内容,您可以使用这些键读取内容。
6、枚举是对相关值进行分组的一种方式,因此您可以使用它们而不会出现拼写错误。
7、您可以将原始值附加到枚举,以便可以从整数或字符串创建它们,也可以添加关联的值以存储有关每种情况的其他信息。
赏我一个赞吧~~~