Swift 4.2之数据类型理解

 

 

Swift 提供了三种基本数据类型,包括数组、集合、字典,都可用于存储值集合。数组是值的有序集合。集合是无序值的唯一值集合。字典是关键值关联的无序集合。

 

0

Swift 中的数组、集合、字典对它们可以存储的值和键值的类型都是十分严格的。因此您不能随意将错误的数据类型值插入到集合中。同时也保证了对从集合筛选的值准确无误。

注释

Swift 中的数组、集合、字典类型都是*泛型集合。 泛型.

集合的可变性

如果创建数组、集合或字典,并将其赋值给变量,则所创建的集合将是可变的。这意味着,在集合中添加、删除或更改集合后,可以更改集合。如果将数组、集合或字典赋给常量,则集合为不可变,并且其大小和内容不能更改。

注释

在不需要更改集合的所有情况下,创建不可变集合是一种很好的做法。这样做可以使您更容易对代码进行理解分析,并使 Swift 编译器能够优化所创建的集合的性能。
数组

数组在有序列表中存储相同类型的值。相同的值可以在数组中多次出现在不同的位置。

注释

Swift 中的数组类型被归纳到基础的 不可变数组 分类里。

有关如何使用基础数组和Cocoa中的更多信息,请参阅 数组和不可变数组之间的桥接.

数组类型速记语法

Swift 数组的类型被完整地写为数组<元素>,其中Element是数组允许存储的值类型。您还可以用Element写一个数组的形式。虽然这两种形式在功能上是相同的,但在引用数组的类型时,最好使用缩写形式。

 

创建空数组

可以使用初始化器语法创建某种类型的空数组:

var someInts = [Int]()
print("someInts is of type [Int] with \(someInts.count) items.")
// 打印某些类型为「Int」的0个项目

注释,从初始化器的类型推断 SomeInts 变量的类型为 Int 

或者,如果上下文已经提供了类型信息,例如函数参数或已经键入的变量或常量,则可以创建一个空数组,该数组具有空数组文字,写为 [] (一对空的方括号):

someInts.append(3)
// 现在包含1个int类型的值
someInts = []
// 

某些对象现在是空数组,但仍然是「Int」类型。

 

创建具有默认值的数组

Swift 的Array类型还提供了一个初始化器,用于创建一个特定大小的数组,所有的值都设置为相同的默认值。通过这个初始化器,一个适当类型的默认值(称为 repeating ):在新数组中重复该值的次数(称为 count ):

var threeDoubles = Array(repeating: 0.0, count: 3)
// threeDoubles是[Double]类型,等于[ 0,0,0 ]。

通过添加两个数组一起创建数组

可以通过添加两个具有兼容运算符类型的现有数组( )来创建一个新数组。新数组的类型是从两个数组中添加的类型合成的:

var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
// anotherThreeDoubles是 [Double]类型, 等于 [2.5, 2.5, 2.5]

var sixDoubles = threeDoubles + anotherThreeDoubles
// sixDoubles最终还是 [Double]类型, 等于 [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

 

创建一个数组名为Array Literal的数组

还可以用一个数组Array Literal初始化一个数组,这是将一个或多个值写入数组集合的快捷方式。Array Literal是一个可以写入一个或多个值列表,用逗号分隔,由一对方括号包围:

[value 1, value 2, value 3]

下面的示例创建一个名为 shoppingList 的数组来存储String 值:

var shoppingList: [String] = ["Eggs", "Milk"]
//  shoppingList 初始化了两个初始项

 shoppingList 变量被声明为 字符串值数组 ,写为 [String ] 。因为这个特定的数组已经指定了一个 string 的值类型,所以它只允许存储 String 值。这里, shoppingList 数组用两个 String 值( Eggs 和 Milk )初始化,在数组文字中写入。

注释

 shoppingList 数组被声明为变量(用 var 声明)而不是常数(用 let 」声明),因为在下面的例子中,更多的项目被添加到 shoppingList 中。

 

在这种情况下,Array Literal 包含两个String 值,而没有其他的值。这与shoppingList变量的声明类型(一个只能包含String 值的数组)相匹配,因此允许Array Literal中的赋值作为初始化两个初始项的shoppingList的方式。

多亏了 Swift 的类型推断,如果你用一个包含相同类型的值的数组文字来初始化数组,就不必编写数组的类型。shoppingList的初始化可以用更短的形式来写:

var shoppingList = ["Eggs", "Milk"]

因为数组文本中的所有值都是相同的类型,所以 Swift 可以推断,[String ]是用于shoppingList变量的正确类型。

 

访问和修改数组

通过它的方法和属性或使用下标语法来访问和修改数组。

若要查找数组中的项数,请检查其只读count属性:

print("The shopping list contains \(shoppingList.count) items.")
// 打印shopping List 包含2个项目。

使用布尔isEmpty属性作为检查count属性是否等于0的捷径:

if shoppingList.isEmpty {
    print("The shopping list is empty.")
} else {
    print("The shopping list is not empty.")
}
// 打印 shopping List 不为空。

您可以通过调用数组的append(_:)方法来向数组的末尾添加一个新项:

shoppingList.append("Flour")
// shopping List 现在包含了3个项目,有人在做煎饼。

或者,用加法赋值运算符追加一个或多个兼容项的数组。 (+= ):

shoppingList += ["Baking Powder"]
// shoppingList 现在包含4个项目
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
// shoppingList 现在包含7个项目

通过使用*下标语法从数组中检索值,在数组名称后面立即传递要在方括号内检索的值的索引:

var firstItem = shoppingList[0]
// firstItem 等于Eggs

 

注释

数组中的第一个项的索引为0 ,而不是1 。 Swift 中的数组始终是零索引的。

可以使用下标语法更改给定索引中的现有值:

shoppingList[0] = "Six eggs"
// shoppingList中的第一个项目现在等于「Six eggs」而不是「eggs」。

当使用下标语法时,指定的索引必须是有效的。例如,写shoppingList[shoppingList.count]=Heal 试图将一个项追加到数组的末尾会导致运行时错误。

您也可以使用下标语法来同时更改一系列值,即使替换值集的长度与所替换的范围不同。下面的例子取代了Chocolate SpreadCheese ,和Butter 和Bananas 和Apples :

shoppingList[4...6] = ["Bananas", "Apples"]
// shoppingList现在包含6个项目

 

若要将项插入到指定索引的数组中,请调用数组中的 insert(_:at:)方法:

shoppingList.insert("Maple Syrup", at: 0)
//  shoppingList 现在包含7个项目
// 「 Maple Syrup 」现在是名单上的第一项。

在 insert(_:at:)方法调用插入了一个新的项目,其值为Maple Syrup,在shopping List的开头,用0的索引表示。

类似地,用remove(at:)方法移除数组中的项。此方法移除指定索引处的项并返回被删除的项(尽管如果不需要返回值,则可以忽略该值):

let mapleSyrup = shoppingList.remove(at: 0)
// 索引0中的项刚刚被删除。
// shoppingList 现在包含了6个项目,没有 Maple Syrup 。
// mapleSyrup 常数现在等于去除的 Maple Syrup 字符串。

注释

如果您试图访问或修改数组现有边界之外的索引的值,则会触发运行时错误。在将索引与数组的count属性进行比较之前,可以检查索引是否有效。数组中最大的有效索引是count -1,因为数组是从0索引的。然而,当count0时(意思是数组是空的)时,没有有效的索引。

当一个项被移除时,数组中的任何空隙都被关闭,因此索引0的值再次等于Six eggs

firstItem = shoppingList[0]
//  firstItem 现在等于 Six eggs 

如果要从数组中删除最后一个项,请使用removeLast()方法,而不使用remove(at:)方法来避免查询数组的count属性。类似于remove(at:)方法,removeLast()返回被删除的项。

let apples = shoppingList.removeLast()
//数组中的最后一个项刚刚被删除。
//  shoppingList 现在包含5个项目,没有苹果。
// 苹果常数现在等于移除的 Apples 串。

钟长森博客-Swift 4.2之数据类型理解 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值