Swift3.0 - 真的很簡單
Swift3.0 - 數據類型
Swift3.0 - Array
Swift3.0 - 字典
Swift3.0 - 可選值
Swift3.0 - 集合
Swift3.0 - 流控制
Swift3.0 - 對象和類
Swift3.0 - 屬性
Swift3.0 - 函數和閉包
Swift3.0 - 初始化和釋放
Swift3.0 - 協議protocol
Swift3.0 - 類和結構體的區別
Swift3.0 - 枚舉
Swift3.0 - 擴展
Swift3.0 - 下標
Swift3.0 - 泛型
Swift3.0 - 異常錯誤
Swift3.0 - 斷言
Swift3.0 - 自動引用計數(strong,weak,unowned)
Swift3.0 - 檢測API
Swift3.0 - 對象的標識
Swift3.0 - 注釋
Swift3.0 - 元類型
Swift3.0 - 空間命名
Swift3.0 - 對象判等
Swift3.0 - 探究Self的用途
Swift3.0 - 類簇
Swift3.0 - 動態調用對象(實例)方法
Swift3.0 - 文本輸出
Swift3.0 - 黑魔法swizzle
Swift3.0 - 鏡像
Swift3.0 - 遇到的坑
基本
- 定義
list1 = ["你好","2","3","4"]
let list2:[String] = ["你好","2","3","4"]
let list3:[Any] = ["你好","2","3",3,UILabel()]
let list4:NSArray = ["你好","2","3","4",UILabel()]
let list5:NSMutableArray = ["1","2","3","4"]
- 清空數組
list2.removeAll() // 如果定義為var
list2 = [] // 如果定義為var
list5.removeAllObjects() // var 和let 都可以
list5 = [] // 如果定義為var
- 取代操作
shoppingList[4...6] = ["Bananas", "Apples"] // 將數組4...6 的范圍用指定的數組取代
- 插入移除操作
shoppingList.insert("Maple Syrup", at: 0)
let mapleSyrup = shoppingList.remove(at: 0)
let apples = shoppingList.removeLast()
- 遍歷數組
for item in shoppingList {
print(item)
}
for (index, value) in shoppingList.enumerated() {
print("Item \\(index + 1): \\(value)")
}
高級
- 認識map
看一下它的定義
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
解釋:
T 為泛型
transform: 閉包函數 我們需要給它傳入一個有參數有返回值的閉包函數
[T] 函數會返回給我們一個T類型的數組
應用:我們有這樣一個需求,給一組數據中大于20的數字乘以3
//1.先定義一個數組
var numbers = [21, 19, 7, 12]
//2.創建一個有一個參數一個返回值的閉包函數
var closure = {(number:Int) -> Int in
var result = number
if number > 20 {
result *= 3
}
return result
}
//3.調用map函數
print(numbers.map(closure))
由于swift有類型推斷的功能,我們可以這樣寫
let mappedNumbers = numbers.map({ number -> Int in
if number > 20{
return 3 * number
}
return number
})
如果沒有邏輯判斷,給所有值統一乘以3,我們甚至可以這樣寫
let mappedNumbers = numbers.map({ number -> Int in
return number*3
})
再簡潔點
let mappedNumbers = numbers.map({ number in
number*3
})
如果你要將數組中的值全部替換為0你可以像下面這樣
let mappedNumbers = numbers.map({_ in
return 0
})
我們測試一下 for ... in 和 map的速度
測試1:數組numbers的數字變為 0
for ... in
var numbers = Array(repeating: 3, count: 1000000)
var date1 = NSDate()
for i in 0..<numbers.count{
numbers[i] = 0
}
print(NSDate().timeIntervalSince(date1 as Date))
運行兩次測試數據
0.0242440104484558
0.0248509645462036
map
var numbers = Array(repeating: 3, count: 1000000)
var date1 = NSDate()
var newNumbers = numbers.map({_ in
return 0
})
print(NSDate().timeIntervalSince(date1 as Date))
運行兩次結果
0.219065964221954
0.201902985572815
我測試一下小數據 同時給100個數字的數組設置值
for ... in
0.000165998935699463
map
0.0013270378112793
結論:
在執行速度上還是for...in 比較快
問題1 :map的優勢在哪里呢?
sort 排序
public func sorted(by areInIncreasingOrder: (Element, Element) -> Bool) -> [Element]
參數:
areInIncreasingOrder 兩個參數一個返回值得閉包
我們給1萬個數組進行排序,測一下for in 循環排序的時間
// 冒泡排序法
ar date1 = NSDate()
numbers.sort(by: {$0 > $1})
var swap:Int
for i in 0..<numbers.count{
var num = numbers[i]
for j in i..<numbers.count{
if num < numbers[j]{
(num,numbers[j]) = (numbers[j],num)
}
}
}
運行結果
3.54646998643875
3.48700600862503
使用sort 對100萬個數字進行排序
var numbers = Array(repeating: 3, count: 1000000)
for i in 0..<numbers.count{
numbers[i] = i
}
var date1 = NSDate()
numbers.sort(by: {$0 > $1})
print(NSDate().timeIntervalSince(date1 as Date))
運行結果
2.71596896648407
2.66568303108215
結論:
如果使用排序建議使用蘋果給我們提供的方法