程序员iOS技术交流收藏@IT·互联网

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

2015-12-04  本文已影响101人  阿拉斯加的狗

不知道大家觉得现在对swift的了解怎么样了~ 反正本集笔记都是我自己的小demo的总和,觉得分享出来.

废话不多说.把今天最后的基础内容也分享给大家,那就是swift中最为关键重要的也是未来项目开发的根基<函数>跟<闭包> 相信学习过swift的朋友应该都清楚的懂得当初的不易.共勉寻求真正的代码魅力.

本篇学习目录为:

目标

函数

闭包的定义
定义一个函数

//: 定义一个 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 有愿意的小伙伴可以长期学习共勉!
学习永不止步!!!!!!

上一篇 下一篇

猜你喜欢

热点阅读