不知道大家觉得现在对swift的了解怎么样了~ 反正本集笔记都是我自己的小demo的总和,觉得分享出来.
- 一是让大家更加清楚的认识到swift真的离我们越来越近了
- 二是就当自己的一个小笔记,等那天不记得回头翻看也是另外一番滋味,记录自己的成长,在不断的挖掘中学习,不能每天漫无目的的乱撞,量变引起质变,每一位大牛都不是莫名的成为大牛,都要历经小白这漫漫的长路,最终找寻到真正属于自己的那篇空间.
废话不多说.把今天最后的基础内容也分享给大家,那就是swift中最为关键重要的也是未来项目开发的根基<函数>跟<闭包> 相信学习过swift的朋友应该都清楚的懂得当初的不易.共勉寻求真正的代码魅力.
本篇学习目录为:
目标
函数
定义格式
外部参数
无返回值的三种情况
闭包
闭包的定义
尾随闭包
-
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()// 调用函数的时候,默认第一个参数名可以省略,在早期 swift 中 sum(10, 20) print(sum(10, y: 30)) print(sum2(num1: 50, num2: 30)) demo1() demo2() demo3()
}
// 没有返回值的情况
/**
1. 什么都不写
2. Void
3. ()日常开发中,可以什么都不写,三种格式一定要都知道 三种类型,在闭包中会使用!
*/
func demo1() {
print("哈哈")
}func demo2() -> Void {
print("呵呵")
}func demo3() -> () {
print("嘻嘻")
}// 外部参数
/**
外部参数,不会影响到函数内部的代码执行
作用是方便调用函数的程序员,更加明确各个参数的语义外部参数,在闭包中很重要
*/
func sum2(num1 x: Int, num2 y: Int) -> Int {
return x + y
}/**
格式
func 函数名(行参列表) -> 返回值类型
*/
func sum(x: Int, y: Int) -> Int {
return x + y
}
}
闭包的定义
定义一个函数
//: 定义一个 sum 函数func sum(num1 num1: Int, num2: Int) -> Int { return num1 + num2}sum(num1: 10, num2: 30)//: 在 Swift 中函数本身就可以当作参数被定义和传递let mySum = sumlet result = mySum(num1: 20, num2: 30)
定义一个闭包闭包 = { (行参) -> 返回值 in // 代码实现 }
in
用于区分函数定义和代码实现
//: 闭包 = { (行参) -> 返回值 in // 代码实现 }let sumFunc = { (num1 x: Int, num2 y: Int) -> Int in return x + y}sumFunc(num1: 10, num2: 20)
最简单的闭包,如果没有参数/返回值,则 参数/返回值/in
统统都可以省略{ 代码实现 }
let demoFunc = { print("hello")}
关于闭包的实战演练
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadData2 { (html) -> () in
print("完成回调代码 \(html)")
}
loadData3()
}
// `尾`随闭包 - 不要求自己写,但是,要求必须能看懂
// 1. 闭包最后一个参数
// 2. 函数 的 ) 前置到倒数第二个参数末尾
// 3. 最后一个逗号省略
// 补充,简化闭包,如果没有参数,没有返回值,可以省略
func loadData3() {
dispatch_async(dispatch_get_global_queue(0, 0)) {
print("hehe")
}
dispatch_async(dispatch_get_global_queue(0, 0)) {
print("haha")
dispatch_sync(dispatch_get_main_queue()) {
print("主线程回调")
}
}
}
// block / 闭包的应用场景
// 通常用在异步加载网络数据,完成回调 -> 以 参数 的形式 传递网络获取的数据
func loadData2(finished: (html: String) -> ()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗时操作 \(NSThread.currentThread())")
// 通常加载数据...
// 异步完成之后,通过 block 回调
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成 \(NSThread.currentThread())")
// 执行 finished 回调
finished(html: "<html></html>")
})
}
}
// block / 闭包的应用场景
// 通常用在异步加载网络数据,完成回调
func loadData(finished: () -> ()) {
dispatch_async(dispatch_get_global_queue(0, 0)) { () -> Void in
print("耗时操作 \(NSThread.currentThread())")
// 通常加载数据...
// 异步完成之后,通过 block 回调
dispatch_async(dispatch_get_main_queue(), { () -> Void in
print("完成 \(NSThread.currentThread())")
// 执行 finished 回调
finished()
})
}
}
有关swift的基本语法我就总结到这里.明天我将会给大家带来swift的面向对象的相关知识.不要急~ 希望能够帮助那些想学而又却无法下手的学习swift的书友们.有什么不懂得地方或者有建议的地方可以子啊下方留言,学习嘛 就是在不断的思考中才能得到最有效的回馈.
iOS技术成长群:255032637 有愿意的小伙伴可以长期学习共勉!
学习永不止步!!!!!!