Swift 3.0之後的Array用法記錄以及迴圈遍歷知識點

Deft_MKJing宓珂璟發表於2017-01-13

Swift更新還是蠻快的,以前寫的一下小東西基本上編譯起來都是一片紅,還是稍微記錄下,後期可以幫助自己翻閱

陣列

// 方法1
let arrar1 = ["hehe","haha"];

// 方法2
let arrar2 = [String]()




- 陣列使用[]即可
- 陣列中型別一致,那麼就是該型別的陣列 let arr: [String]
- 陣列中型別不一致,那麼就是any型別的 let arr1: [Any]

基本操作

// 陣列
let arr = ["zhangsan","sli"]
// 這裡列印出來是swift樣式的
print(arr)

for a in arr {
    print(a)
}
// 像OC一樣列印
print(arr as NSArray)

// 不同型別的資料就全是物件型別
let arr1 = ["ssa","aaa",1] as [Any]
print(arr1 as NSArray)

let a = 1
var array:[String]
array = ["zhangsan"]
print(array)
// 增加字串
array.append("hehe")
// 陣列基本操作
print(array)
// 拼接基本型別
array.append("\(a)")
// 容量
print(array.capacity)
print(array)
// 刪除下標
array.remove(at: 1)
print(array)
// 刪除全部
array.removeAll(keepingCapacity: true)
print(array.capacity)
// 動態新增成員
for i in 0..<10 {
    array.append("\(i)")
//    print("\(array)--\(array.capacity)")
}
print(array)

// 陣列拼接
// 初始化
var array2 = [String]()
array2.append("1")
array2.append("2")

array2 += array
print(array2)




- 如果定義陣列時制定了儲存物件的型別,擇不能像陣列裡面新增其他型別
- 可以使用String初始化
- let型別的陣列時不可變的
- var型別的陣列是可變的


1.Range型別遍歷

//for var i=0;i<10;i++{
//    print(i)
//}

// Swift迴圈
// 0..<10 代表一個區間返回 0-10 包含頭部,不包含尾部
for i in 0..<10 {
    print(i)
}

// _ 代表忽略,如果不關心某個引數,就可以使用_ 使用較多
for _ in 0..<10 {
    print("f")
}

// 0...10 <=10
for i in 0...10 {
    print(i)
}


2.陣列的enumerated遍歷

1.普通獲取
let lists = [1,2,3,4,5,6,7]
var result = ""
for num in lists.enumerated() {
    result += "\(num.offset)---\(num.element)||"
}
print(result)
0---1||1---2||2---3||3---4||4---5||5---6||6---7||
分別列印的是inedx和value
// 元祖型別遍歷
// 可以吧上面的num換成元祖
let lists = [1,2,3,4,5,6,7]
var result = ""
for (index,item) in lists.enumerated() {
    result += "\(index)--\(item)||"
}
print(result)



可以看下enumerated為什麼可以用元祖
public func enumerated() -> EnumeratedSequence<Array<Element>>
這東西再點進去就是EnumeratedSequence 型別
這個東西十個結構體,反正按照文件上的註釋來操作,該陣列的每個值都是(index,item的形式,分別代表下標和值)

/// To create an instance of `EnumeratedSequence`, call `enumerated()` on a
/// sequence or collection. The following example enumerates the elements of
/// an array.
///
///     var s = ["foo", "bar"].enumerated()
///     for (n, x) in s {
///         print("\(n): \(x)")
///     }
///     // Prints "0: foo"
///     // Prints "1: bar"
public struct EnumeratedSequence<Base : Sequence> : Sequence

擴充套件下,這個型別結構體裡面還有反向輸出以及過濾輸出等功能

// 反向輸出
let lists = [1,2,3,4,5,6,7]
var result = ""
for (index,item) in lists.enumerated().reversed(){
    result += "\(index)--\(item)||"
}
print(result)
6--7||5--6||4--5||3--4||2--3||1--2||0--1||
// 篩選輸出為index是2的倍數的值,這裡可以進行無線擴充套件了,如果需要篩選儘管給需要的條件就好了
let lists = [1,2,3,4,5,6,7]
var result = ""
for (index,item) in lists.enumerated().filter({ (index,item) -> Bool in
    return index%2 == 0;
}) {
    result += "\(index)--\(item)||"
}
print(result)
0--1||2--3||4--5||6--7||

相關文章