目录
数组
集合
元组
Arrays vs sets vs tuples
字典
字典默认值
创建空集合
枚举
枚举关联值
枚举原始值
复杂类型:总结
数组
数组是存储为单个值的值的集合。例如,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 colors = Set(["red", "green", "blue"])
当你查看 Playground 输出中的值时,colors
你会发现它与我们创建它的顺序不匹配。它实际上不是随机顺序,只是无序的——Swift 不保证它的顺序。因为它们是无序的,所以你不能像数组那样使用数字位置从集合中读取值。
如果您尝试将重复项插入到集合中,则重复项将被忽略。例如:
let colors2 = Set(["red", "green", "blue", "red", "blue"])
最终的colors2
集合仍然只包含红色、绿色和蓝色各一次。
元组
元组允许你将多个值存储在一个值中。这听起来可能像数组,但元组有所不同:
-
您不能在元组中添加或删除项目;它们的大小是固定的。
-
您不能更改元组中项目的类型;它们始终具有与创建时相同的类型。
-
您可以使用数字位置或命名来访问元组中的项目,但 Swift 不允许您读取不存在的数字或名称。
通过将多个项目放在括号中来创建元组,如下所示:
var name = (first: "Taylor", last: "Swift")
然后,您可以使用从 0 开始的数字位置访问项目:
name.0
或者您可以使用名称来访问项目:
name.first
请记住,创建元组后,您可以更改其中的值,但不能更改值的类型。因此,如果您尝试将其更改name
为,(first: "Justin", age: 25)
则会收到错误。
Arrays vs sets vs tuples
数组、集合和元组乍一看似乎很相似,但它们的用途却截然不同。为了帮助您了解应该使用哪种,以下是一些规则。
如果您需要一个特定的、固定的相关值集合,其中每个项目都有精确的位置或名称,那么您应该使用元组:
let address = (house: 555, street: "Taylor Swift Avenue", city: "Nashville")
如果您需要一个必须唯一的值的集合,或者您需要能够非常快速地检查特定项目是否存在,则应使用集合:
let set = Set(["aardvark", "astronaut", "azalea"])
如果您需要一个可以包含重复项的值集合,或者项目的顺序很重要,那么您应该使用数组:
let pythons = ["Eric", "Graham", "John", "Michael", "Terry", "Terry"]
数组是迄今为止三种类型中最常见的。
字典
字典就像数组一样是值的集合,但是它不是用整数位置来存储东西,而是可以使用任何您想要的方式访问它们。
存储字典数据的最常见方式是使用字符串。例如,我们可以创建一个字典,使用歌手的名字来存储歌手的身高:
let heights = ["Taylor Swift": 1.78,"Ed Sheeran": 1.73]
就像数组一样,字典以括号开头和结尾,每个项目都用逗号分隔。但是,我们还使用冒号将要存储的值(例如 1.78)与要将其存储在其下的标识符(例如“Taylor Swift”)分隔开。
这些标识符被称为键,你可以使用它们从字典中读取数据:
heights["Taylor Swift"]
注意:使用类型注释时,字典写在括号中,标识符和值类型之间用冒号隔开。例如,[String: Double]
和[String: String]
。
字典默认值
如果您尝试使用不存在的键从字典中读取值,Swift 将返回nil
任何内容。虽然这可能是您想要的,但还有另一种选择:我们可以为字典提供一个默认值,以便在我们请求缺少的键时使用。
为了证明这一点,让我们创建一个两个人最喜欢的冰淇淋的词典:
let favoriteIceCream = ["Paul": "Chocolate","Sophie": "Vanilla"]
我们可以这样理解保罗最喜欢的冰淇淋:
favoriteIceCream["Paul"]
但是如果我们尝试读取 Charlotte 最喜欢的冰淇淋,我们会得到 nil,这意味着 Swift 没有该键的值:
favoriteIceCream["Charlotte"]
我们可以通过给字典一个默认值“Unknown”来解决这个问题,这样当没有找到 Charlotte 的冰淇淋时,我们得到的是“Unknown”而不是 nil:
favoriteIceCream["Charlotte", default: "Unknown"]
创建空集合
数组、集合和字典被称为集合,因为它们将值集中在一个地方。
如果要创建一个空集合,只需写下其类型,然后加上开括号和闭括号即可。例如,我们可以创建一个空字典,其中键和值都是字符串,如下所示:
var teams = [String: String]()
然后我们可以稍后添加条目,如下所示:
teams["Paul"] = "Red"
类似地,您可以创建一个空数组来存储整数,如下所示:
var results = [Int]()
例外情况是创建空集,其操作方式不同:
var words = Set<String>()var numbers = Set<Int>()
这是因为 Swift 仅对字典和数组有特殊的语法;其他类型必须使用尖括号语法,如集合。
如果需要,您可以使用类似的语法创建数组和字典:
var scores = Dictionary<String, Int>()
var results = Array<Int>()
枚举
枚举(通常称为枚举)是一种定义相关值组的方法,使其更易于使用。
例如,如果您想编写一些代码来表示您正在执行的某项工作的成功或失败,您可以将其表示为字符串:
let result = "failure"
但如果有人意外地使用了不同的命名会发生什么?
let result2 = "failed"
let result3 = "fail"
这三个都是不同的字符串,因此它们的含义也不同。
使用枚举,我们可以定义一个Result
可以是success
或 的类型failure
,如下所示:
enum Result {
case success
case failure
}
现在当我们使用它时,我们必须选择以下两个值之一:
let result4 = Result.failure
这可以防止您每次意外使用不同的字符串。
枚举关联值
除了存储简单值之外,枚举还可以存储与每个案例关联的值。这样您就可以将其他信息附加到枚举中,以便它们可以表示更细微的数据。
例如,我们可以定义一个存储各种活动的枚举:
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) }
现在我们可以更精确了——我们可以说有人在谈论足球:
枚举原始值
有时您需要能够为枚举赋值,以便它们有意义。这让您可以动态创建它们,并以不同的方式使用它们。
例如,您可以创建一个Planet
枚举来存储每种情况的整数值:
enum Planet: Int {
case mercury
case venus
case earth
case mars
}
Swift 会自动为每一个元素分配一个从 0 开始的数字,你可以使用该数字来创建相应枚举实例的实例。例如,earth
将分配数字 2,因此你可以这样写:
let earth = Planet( rawValue: 2)
如果需要,您可以为一个或多个案例分配特定值,Swift 将生成其余值。我们不太自然地将地球视为第二颗行星,因此您可以这样写:
enum Planet: Int {
case mercury = 1
case venus
case earth
case mars }
现在 Swift 将分配 1mercury
并从那里向上计数,这意味着earth
现在是第三颗行星。
复杂类型:总结
让我们总结一下:
-
数组、集合、元组和字典可让您将一组项目存储在单个值下。它们各自以不同的方式实现这一点,因此您使用哪种方式取决于您想要的行为。
-
数组按照添加项目的顺序存储项目,并且您可以使用数字位置访问它们。
-
设置存储项目无任何顺序,因此您无法使用数字位置访问它们。
-
元组的大小是固定的,你可以给每个项目附加名称。你可以使用数字位置或使用你的名字来读取项目。
-
字典根据键存储项目,您可以使用这些键读取项目。
-
枚举是一种对相关值进行分组的方法,因此您可以在使用它们时不会出现拼写错误。
-
您可以将原始值附加到枚举,以便可以从整数或字符串创建它们,或者可以添加关联值来存储有关每种情况的附加信息。