Swift 提供两种集合类型来存储集合,数组和字典。数组是一个同类型的序列化列表集合。字典是一个能够使用类似于键的唯一标识符来获取值的非序列化集合。
在Swift中,数组和字典的键和值都必须明确它的类型。这意味这数组和字典不会插入一个错误的类型的值,以致于出错。这也意味着当你在数组和字典中取回数值的时候能够确定它的类型。
Swift 使用确定的集合类型可以保证代码工作是不会出错,和让你在开发阶段就能更早的捕获错误。
note:
Swift的数组 储存不同的类型会展示出不同的行为,例如变量,常量或者 函数和方法。更多的信息参见Mutability of Collections and Assignment 和 Copy Behavior for Collection Types.
1、数组
数组是储存同类型不同值的序列化列表。同样的值可以在数组的不同位置出现多次。
Swift数组是储存确定的值,这个Objective-C中的NSArray和NSMutableArray类是有区别的。因为它们是储存各种的 对象,而且并不提供返回任何有关对象的具体信息。在Swift中,无论是确定的声明,还是隐式的声明,数组是非常确定它自身是储存什么样的类型,而且,它 并不一定要求储存的是类对象。所以Swift数组是类型安全的,因为它一直都确定它自身所能包含的值。
数组的简略语法
定义数组的完整写法是Array<SomeType>。其中SomeType是你想要包含的类型。你也可以使用类似于SomeType[]这样的简略语法。虽然这两种方法在功能上是相同的。但是我们更推荐后者,而且它会一直贯穿于本书。
数组实量(Array Literals)
你可以用一个数组实量(Array Literals)来初始化一个数组,它是用简略写法来创建一个包含一个或多个的值的数组。一个数组实量(Array Literals)是由它包含的值,“,”分隔符 已经包括以上内容的中括号对“[]”组成:
1 |
[value 1, value 2, value 3] |
下面的例子创建一个叫shoppinglist,储存字符串(String)类型的数组。
1 2 |
var shoppingList: String[] = ["Eggs", "Milk"] // 使用两个初始化参数来初始化shoppingList |
shoppinglist变量被定义为字符串(String)类型的数组,写作String[]。因为这个数组被确定为字符串类型 (String),所以它只能储存字符串(String)类型的值。在这里,用两个字符串类型的值(”Eggs” and “Milk”)和数组实量(Array Literals)的写法来初始化shoppingList数组。
注意
shoppingList数组是被定义为一个变量(使用var 标识符)而不是常量(使用let 标识符),所以在下面的例子可以直接添加元素。
在这个例子中,数组实量(Array Literals)只包含两个字符串类型的值,这符合了shoppingList变量的定义(只能包含字符串(String)类型的数组),所以被分配的数组实量(Array Literals)被允许用两个字符串类型的值来初始化。
得益于Swift的类型推断,当你用相同类型的值来初始化时,你可以不写明类型。初始化shoppingList可以用下面这个方法来代替。
1 |
var shoppingList = ["Eggs", “Milk"] |
因为数组实量(Array Literals)中所有的值都是同类型的,所以Swift能够推断shoppingList的类型为字符串数组(String[])。
读取和修改数组
你可以通过方法和属性,或者下标来读取和修改数组。
通过只读属性count来读取数组的长度;
1 2 |
println("The shopping list contains (shoppingList.count) items.") // prints "The shopping list contains 2 items.” |
通过一个返回布尔类型的isEmpty属性检查数组的长度是否为0
1 2 3 4 5 6 |
if shoppingList.isEmpty { println("The shopping list is empty.") } else { println("The shopping list is not empty.") } // prints "The shopping list is not empty." |
在数组末尾增加一个元素可以通过append方法
1 2 |
shoppingList.append("Flour") // shoppingList 现在包含3个元素 |
甚至,还可以用(+=)操作符来把一个元素添加到数组末尾
1 2 |
shoppingList += "Baking Powder" // shoppingList 现在包含4个元素 |
你也可以用(+=)操作符来把一个数组添加到另一个数组的末尾
1 2 |
shoppingList += ["Chocolate Spread", "Cheese", "Butter"] // shoppingList 现在包含7个元素 |
从数组中取出一个值可以使用下标语法。如果你知道一个元素的索引值,你可以数组名后面的中括号中填写索引值来获取这个元素
1 2 |
var firstItem = shoppingList[0] // firstItem 等于 “Eggs" |
注意,数组的第一个元素的索引值为0,不为1,Swift的数组总是索引0;
你可以使用下标语法通过索引修改已经存在的值。
1 2 |
shoppingList[0] = "Six eggs" //列表中的第一个值等于"Six eggs" 而不等于 “Eggs" |
你可以使用下标语法一次性改变一系列的值,尽管修改的区域远远大于要修改的值。在下面的雷子中, 替换掉 “Chocolate Spread”, “Cheese”,”Butter”,”Bananas”,”Apples”:
1 2 |
shoppingList[4...6] = ["Bananas", "Apples"] // shoppingList 现在包含6个元素 |
注意,你不能使用下标语法在数组中添加一个元素,如果你尝试使用下标语法来获取或者设置一个元素,你将得到一个运行时的错误。尽管如此,你可以通过 count属性验证索引是否正确再使用它。当count为0时(意味着数组为空),则count-1超出了索引的有效范围,因为数组的索引总是从0开始。
在一个特定的索引位置插入一个值,可以使用insert(atIndex:)方法
1 2 3 |
shoppingList.insert("Maple Syrup", atIndex: 0) // shoppingList 现在包含7个元素 // "Maple Syrup" 在数组的第一位 |
这里调用insert方法指明在shoppingList的索引为0的位置中插入一个新元素 “Maple Syrup”
同理,你可以调用removeAtIndex方法移除特定的元素。这个方法移除特定索引位置的元素,已经返回这个被移除的元素(尽管你并不关心这个返回值)。
1 2 3 4 |
let mapleSyrup = shoppingList.removeAtIndex(0) // 索引位置为0的元素被移除 // shoppingList 现在包含6个元素, 不包括 Maple Syrup // mapleSyrup 常量等于被移除的 "Maple Syrup" 字符串 |
当元素被移除的,数组空缺的位置将会被填补,所以现在索引位置为0的元素再一次等于”Six eggs”:
1 2 |
firstItem = shoppingList[0] // firstItem 现在等于 "Six eggs” |
如果你从数组中移除最后一个元素,使用removeLast方法比removeAtIndex更方便,因为后者需要通过count属性计算数组的长度。和removeAtIndex方法一样,removeLast会返回被移除的元素。
1 2 3 4 |
let apples = shoppingList.removeLast() //元素的最后一个元素被移除 // shoppingList 现在包含5个元素,不包括 cheese // apples 常量 现在等于被移除的 "Apples" string |
遍历数组
可以使用for-in循环来遍历数组中的值
1 2 3 4 5 6 7 8 |
for item in shoppingList { println(item) } // Six eggs // Milk // Flour // Baking Powder // Bananas |
如果需要每一个元素的整形的索引值,使用enumerate函数代替会更方便,enumerate函数对于每一个元素都会返回一个包含元素的索引和值的元组(tuple)。你可以在遍历部分分解元祖并储存在临时变量或者常量中。
1 2 3 4 5 6 7 8 |
for (index, value) in enumerate(shoppingList) { println("Item (index + 1): (value)") } // 元素 1: Six eggs // 元素 2: Milk // 元素 3: Flour // 元素 4: Baking Powder // 元素 5: Bananas |
如需更多for-in 循环信息, 参见 For Loops.
创建和初始化数组
创建一个空的数组和确定的类型(不包含初始化值)使用的初始化语法:
1 2 3 |
var someInts = Int[]() println("someInts is of type Int[] with (someInts.count) items.") // prints "someInts is of type Int[] with 0 items.” |
注意,someInt变量被确定为Int[],因为它使用生成Int[]的初始化方法。
或者,如果上下文(context)已经提供类型信息,例如函数参数或者已经确定类型的常量和变量,你可以从空的数组实量(Array Literals)创建一个空数组,写作[](空的中括号对)。
1 2 3 4 |
someInts.append(3) // someInts 现在包含1个Int型的元素 someInts = [] // someInts 现在是一个空的数组, 但是类型仍然为Int[]; |
Swift数组类型也提供初始化方法来创建确定长度和提供默认数值的数组。你可以通过这个初始化方法增加一个新的数组,元素的数量成为count,合适的默认值为repeatedValue
1 2 |
var threeDoubles = Double[](count: 3, repeatedValue: 0.0) // threeDoubles 的类型为 Double[], 以及等于 [0.0, 0.0, 0.0] |
得益于类型推断,你并不需要指明这个数组储存的类型就能使用这个初始化方法,因为它从默认值中就能推断出来。
1 2 |
var anotherThreeDoubles = Array(count: 3, repeatedValue: 2.5) // anotherThreeDoubles 被推断为 Double[], 以及等于 [2.5, 2.5, 2.5] |
最后,你可以使用(+)操作符就能创建一个新的数组,把两个存在的数组添加进来
这个新的数组类型从你添加的两个数组中推断出来
1 2 |
var sixDoubles = threeDoubles + anotherThreeDoubles // sixDoubles 被推断为 Double[], 并等于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5] |
来自letsswift.com
感谢翻译小组成员:李起攀(微博)、若晨(微博)、YAO、粽子、山有木兮木有枝、渺-Bessie、墨离、Tiger大顾(微博)
本文由翻译小组成员原创发布,个人转载请注明出处,商业转载请联系我们~ 感谢您对我们工作的支持~
相关推荐
【Swift语言介绍】 Swift是由Apple开发的一种新型编程语言,它被设计用来编写iOS和macOS应用程序。Swift在2014年的WWDC(Worldwide Developers Conference)上首次亮相,是与iOS 8一同推出的,目的是为了提升开发者...
### 苹果Swift编程语言入门教程中文版 #### 1. 简介 Swift是一种专为iOS和OS X应用程序设计的新一代编程语言。它基于C和Objective-C的基础之上进行了改进,摆脱了一些C语言的兼容性限制。Swift采用了一种更为安全...
Swift语言是由苹果公司开发的编程语言,自2014年首次推出以来,一直是苹果开发者生态系统的核心工具之一。本教程为全中文教程,基于Xcode 6.1版本,介绍了Swift的全部最新语法,覆盖了Swift编程语言的基础知识、特性...
本教程旨在为初学者提供一个全面的Swift语言学习平台,帮助他们快速掌握这一强大的工具。 Swift语言的特性包括语法简洁、安全、高性能以及与Objective-C的无缝集成。它引入了诸多创新特性,如类型推断、可选链式...
本教程为“苹果Swift编程语言入门教程-中文完整版”,适合初学者学习Swift的基础知识和实践技巧。 Swift的特点包括简洁的语法、类型安全、互动性以及对现代编程概念的支持,如可选类型、闭包和泛型。以下是一些主要...
- **集合类型(Collection Types)**:Swift中的集合类型主要包括数组(Arrays)、集合(Sets)和字典(Dictionaries)。 由于原始文件内容的不完整性,无法提供更为具体和针对性的教程解析。建议结合实际的Swift...
Swift语言是由苹果公司推出的一种强大的、编译型的编程语言,它主要用于iOS、macOS、watchOS和tvOS平台的应用开发。Swift的设计理念是为了取代老旧的Objective-C语言,它吸取了Objective-C的很多优点,并在此基础上...
这个教程可能包含了创建你的第一个Swift项目、基本数据类型、控制流语句、字符串和字符、操作符、集合类型等内容,通过实际编程示例帮助读者巩固所学知识。 “在线资源.txt”文件很可能是提供了一些最新的Swift编程...
8. **数组与字典**:Swift中的两种主要集合类型,包括它们的创建、操作和遍历方法。 9. **枚举与元组**:枚举提供了一种定义一组相关值的方式,元组则用于组合多个值。 10. **协议与扩展**:协议定义了遵循该协议...
### Swift编程语言中文教程知识点概览 #### 一、Swift编程语言简介 - **Swift**是一门由苹果公司推出的编程语言,专为开发iOS和macOS应用而设计。该语言结合了C和Objective-C的优点,但又去除了后者的一些限制,如...
#### 二、Swift语言基础知识 1. **简单值** - Swift中的简单值包括基本数据类型,如整数、浮点数、布尔值等。 - 这些类型通常用于表示数字或逻辑状态。 2. **控制流** - 控制流结构如`if`、`for`、`while`等,...
Swift语言是苹果公司推出的一种强大的、现代化的编程语言,用于构建iOS、iPadOS、macOS、watchOS和tvOS的应用程序。本资源“Swift语言学习基础Demo集合”旨在为初学者提供一系列实践示例,帮助他们更好地理解和掌握...
### Swift语言入门教程知识点详解 #### 一、Swift语言简介 Swift是由苹果公司推出的一种现代、高性能的编程语言,主要用于iOS、macOS、watchOS、tvOS等平台的应用开发。Swift语言结合了C语言和Objective-C语言的...
Swift 中文版最新教程 v1.8 提供了对 Swift 语言的基础到进阶知识的覆盖,适合初学者和有经验的开发者使用。它同样可以作为开发团队负责人、项目负责人在进行项目开发时的参考资料。教程自 2016 年9月23日更新至 ...
Swift 是苹果公司推出的一种新的编程语言,专为iOS和OS X应用开发设计。它结合了C和Objective-C的优点,同时摆脱了C语言的兼容性问题。Swift采用安全的编程模式,引入了许多创新特性,使得编程更加简单、灵活且富有...
Swift语言教程 章节目录 1.引言 2.类型安全与类型判断 3.常量与变量 4.控制流语句 5.函数与闭包 6.枚举与结构体 7.类与对象 8.协议与扩展 9.集合类型 10.错误处理 11.自动引用计数与内存管理 12.泛型编程 13.并发...
- **官方文档**:苹果官方网站提供了详尽的Swift语言文档,包括教程和API参考。 - **社区论坛**:Stack Overflow、GitHub、Swift.org等都是很好的学习资源和求助平台。 - **书籍与教程**:市面上有很多关于Swift语言...
Swift4.0引入了通用集合类型的改进,比如Set和Dictionary,以及新的文件系统操作API,让开发者更方便地处理文件。 在游戏开发中,理解面向对象编程(OOP)概念至关重要。Swift4.0支持类、结构体、枚举等面向对象...
以上内容覆盖了Swift语言的核心知识点,包括数据类型、变量、类、方法、流程控制语句、字符串处理、集合类型以及可选类型,并提及了Swift开发中不可或缺的Xcode工具。学习并掌握这些知识点是成为一名高效Swift开发者...