三.初识Swift.让我们的程序飞起来~(函数-闭包)

不知道大家觉得现在对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 有愿意的小伙伴可以长期学习共勉!
学习永不止步!!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 作为一个非甘肃人,十八岁之前我对兰州的印象是:有漂亮高大的清真寺;有戴着白帽头包纱巾虔诚的穆斯林;还有雄伟的中山桥...
    小呆瓜yo阅读 217评论 0 0
  • 文╱樊笼。 我是黎媛,一个大三的学生,有一天,我们宿舍聊起了小时候喜欢过什么人…… “我喜欢过一个...
    樊笼i阅读 535评论 0 0
  • 安装 depot_tools 把 depot_tools 加入环境变量 clone 源代码创建一个文件夹用来存放 ...
    刻口客乐阅读 5,906评论 39 9
  • GCD的同步任务会立即执行可以在完成同步任务后再完成异步任务,这样任务就有了顺序。 同步任务的特点:立即执行,会阻...
    frankisbaby阅读 517评论 0 0