我以前做的swift笔记, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以当做自己的一份文档.
override func viewDidLoad() {
super.viewDidLoad()
demo()
// loadData { (result) in
// print("获取的新闻数据\(result)")
// }
'尾'随闭包
如果函数的最后一个参数是闭包 函数参数可以提前结束 最后一个参数直接使用 {} 包装闭包的代码
大多数尾随闭包, xcode 会自动调整为尾随闭包
但gcd嵌套时, 嵌套的尾随闭包,xcode不会自动调整为尾随闭包样式
原始的写法 最全的写法
loadData(completion: { (result: [String])->() in
print("获取的新闻数据\(result)")
})
}
在异步执行任务 获取结果 通过block/闭包 回调
闭包的应用场景 和block 完全一致
Function types cannot have argument labels; use '' before 'result'
func loadData(completion: @escaping ( result: [String])->()) -> (){
将任务添加到队列 指定执行任务的函数
翻译: '队列' 调度任务(block/闭包) 以同步/异步的方式执行
DispatchQueue.global().async {
print("耗时操作 \(Thread.current)")
//休眠
Thread.sleep(forTimeInterval: 3.0)
//获得数据
let json = ["头条", "八卦", "大事件"]
//主队列回调
DispatchQueue.main.async{
print("主线程更新 UI \(Thread.current)" )
//回调 执行闭包(通过参数传递的)
completion(json)
}
}
}
尾随闭包
func demo1(){
DispatchQueue.global().async {
DispatchQueue.main.async(execute: {
})
}
DispatchQueue.main.async {
}
}
func demo(){
let b1: (Int)->()
b1 = { (x: Int) -> () in
print("\(x)")
}
b1(4)
}