<6>集合
func demo(){
// let 不可变的数组
// var 可变的数组
//1.定义不可变数组
let array = [1,2,3]
let array1 = ["a","b","c"]
let array2 = ["香蕉","苹果","桃子"]
print(array)
print(array1)
print(array2)
//定义可变数组
var a1 = ["蓝天"]
a1.append("白云")
print(a1)
//定义空的可变的数组
var a2: [String] = [String]()
a2.append("筒子们")
print(a2)
//2.数组的遍历
let a3 = ["%","@","!"]
for i in 0..<a3.count {
let value = a3[i]
print(value)
}
for value in a3 {
print(value)
}
for (i,value) in a3.enumerated() {
print("i:\(i),value:\(value)")
}
//3.数组合并
let arr1 = ["a"]
let arr2 = ["b"]
//使用+可以进行数组的合并
let arr3 = arr1 + arr2
print(arr3)
//4.拓展
var arr4 = ["good"]
arr4.append(contentsOf: ["better","bad"])
print(arr4)
//插入
arr4.insert(contentsOf: ["ok","no"], at: 0)
print(arr4)
//删除
arr4.remove(at: 1)
print(arr4)
//修改
arr4[0] = "change"
print(arr4)
// 字典的定义 [key: value]
// 常用类型 [String: Any] 字典
// let 定义的不可变的字典
// var 定义的可变的字典
// 在swift 2.0 不需要指定[String: Any]类型
// swift 3.0 如果类型不同,需要指定类型
// 1.创建不可变的字典
let dic: [String: Any] = ["name": "puppy","age": 2]
print(dic)
// 创建可变的字典
var dic1: [String: Any] = ["name": "kitty","age": 1]
print(dic1)
// 创建空的可变的字典
var dic3: [String: Any] = [String: Any]()
dic3["name"] = "小红"
print(dic3)
// 2.字典的遍历
for (key,value) in dic1 {
print("key: \(key),value: \(value)")
}
// 3.字典的合并
let d1: [String: Any] = ["name": "Alex"]
var d2: [String: Any] = ["age": 1234]
for (key,value) in d1 {
d2[key] = value
}
print(d2)
// 4.拓展
// 添加
var d3: [String: Any] = ["name": "轩辕"]
d3["sex"] = "girl"
d3.updateValue("北京", forKey: "address")
print(d3)
// 删除
d3["address"] = nil
d3.removeValue(forKey: "sex")
print(d3)
// 修改
d3["name"] = "老千"
print(d3)
}
<7> 函数
// 在swift 里面可以函数嵌套
func test() {
// 有参数有返回值的函数, 在swift 2.0 函数的第一个参数名省略,在swift 3.0 没有省略
func sum(a:Int ,b: Int) -> Int {
return a + b
}
// 函数的外部参数
// 外部参数给调用方说明每个参数是什么意思, 内部参数\供函数内使用的
func mul(num1 a: Int,num2 b: Int) -> Int {
return a * b
}
let result = sum(a: 1, b: 1)
print(result)
let result1 = mul(num1: 5, num2: 6)
print(result1)
}
<8>闭包
func demo() {
// 1.无参数无返回值的闭包 和 无参数无返回值的函数的对比
let closure = {
print("hello")
}
// 执行闭包
closure()
func test() {
print("hello")
}
//执行函数
test()
//2.有参数有返回值的闭包 和 有参数有返回值的函数的对比
//闭包
let closure1 = { (a: Int, b: Int) -> Int in
return a + b
}
let result = closure1(5, 6)
print(result)
//函数
func sum(a: Int,b: Int) -> Int {
return a + b
}
let result2 = sum(a: 5, b: 2)
print(result2)
}
<8.1>闭包的使用
override func viewDidLoad() {
super.viewDidLoad()
let closure = { (result: String) -> () in
print(result)
}
loadData(callBack: closure)
}
// 3.0规定
// @escaping 逃逸, 表示不在当前函数的作用域里面执行
// @noescape 函数默认值的闭包参数是非逃逸状态的,意思在函数作用域中执行
func loadData(callBack: @escaping (String)->()) {
DispatchQueue.global().async {
//模拟耗时操作
Thread.sleep(forTimeInterval: 2)
//准备数据
let result = "123"
DispatchQueue.main.async {
//执行闭包
callBack(result)
}
}
}