Swift数组学习笔记1(Creating)
2019-11-07 本文已影响0人
llllllllIllllIl
//: [Previous](@previous)
importFoundation
// ---------------------
// | Creating an Array |
// ---------------------
// [Element]推荐使用这种缩写方式定义数组类型。 Array<Element>是完成定义。
// 1⃣️ 创建空数组
varsomeInts = [Int]()
// 🍗有上下文可以使用 []空数组字面量 创建空数组
someInts = Array()//[]
// 2⃣️ 创建一个带有默认值的数组。Swift 中的 Array 类型还提供一个可以创建特定大小并且所有数据都被默认的构造方法。本质是先init出一个空数组再内部调用append方法,所以属于RangeReplaceableCollection协议。包括也是。init<S: Sequence>(_ elements: S)初始化器也是先init出一个空数组再内部调用append方法。最
varthreeInts =Array(repeating:0, count:3)
varanotherThreeInts =Array(1...3)
// threeDoubles 是一种 [Double] 数组,等价于 [0.0, 0.0, 0.0]
// 3⃣️ 通过两个数组相加创建一个数组。 你可以使用加法操作符(+)来组合两个已存在的相同类型数组。
var sixInts = threeInts + anotherThreeInts
// sixDoubles 被推断为 [Double],等价于 [0, 0, 0, 1, 2, 3]
// 4⃣️ 用数组字面量构造数组
// 🍗array literal [2, 4, 6, 8],集合类型都遵守ExpressibleByArrayLiteral协议,会更具类型进行初始化,如果是集合[2,2,1,3,4,5]只会有一个2数据。
letevenNumbers1:Array = [2,4,6,8]
letevenNumbers2: [Double] = [2,4,6,8]
var players = ["Alice", "Bob", "Cindy", "Dan"]
// 5⃣️ 使用其他序列初始化数组,可以将复杂的序列初始化成数组。
//⓵ 你也可以使用这个初始化器将复杂的序列或集合类型初始化成数组。比如,字典的属性`keys`其实不是一个数组包括存储形式。它是一个`LazyMapCollection<Dictionary<String, Int>, Int>`的懒加载计算集合,懒加载会在直到使用时计算和分配空间,这样会节省计算时间和内存空间。当你需要将它们放在一个带有数组形式参数的方法中的时候,可以使用public init<S>(_ s: S) where Element == S.Element, S : Sequence来转换类型。
funccacheImagesWithNames(_names: [String]) {
// custom image loading and caching
}
let namedHues: [String: Int] = ["Vermillion": 18, "Magenta": 302, "Gold": 50, "Cerise": 320]
letcolorNames =Array(namedHues.keys)
cacheImagesWithNames(colorNames)
//⓶ 创建一个包含序列元素的数组。您可以使用此初始化程序从符合“序列”协议的任何其他类型创建数组。
letchars =Array("hello")
print(chars)
//看到这个样式的方法就要马上想到用的是数组的init<S>(_ elements: S)初始化器
varnumbers =Array(1...7)
print(numbers)
// Prints "[1, 2, 3, 4, 5, 6, 7]"
//: [Next](@next)