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
结论:
如果使用排序建议使用苹果给我们提供的方法