Swift 3.0 闭包的定义和使用

//
//  ViewController.swift
//  闭包的定义和使用
//
//  Created by 思 彭 on 16/9/17.
//  Copyright © 2016年 思 彭. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 1>. 最简单的闭包 ()->()没有参数,没有返回值的函数 如果没有参数,没有返回值,in可以省略
        let b1 = {

            print("Hello SiSi")
        }
        // 执行闭包
        b1()

        // 2. 带参数的闭包  参数,返回值,实现代码都是写在{}中
        // {形参列表 - >返回值类型  // 实现代码}
        // 使用 in 分割定义和实现 b2的类型: (Int) -> ()
        let b2 = { (x: Int ) ->() in

            print(x)
        }
        // 执行闭包
        b2(100)

        // 3.带参数/返回值的闭包
        // (Int) -> Int
        let  b3 = {(y: Int) ->Int in

            return y + 250
        }
        // 闭包调用
        print(b3(30))

        // 4.异步执行任务,获取数据,通过block/闭包回调,闭包的应用场景和闭包一样
        // 5.尾随闭包 如果函数的最后一个参数是闭包,函数的参数可以提前结束,最后一个参数直接使用{}包装闭包的代码
        /*
         loadData() { (result) in
         print(result)
         }

        */
        loadData { (result) in
            print(result)
        }
        // 按照函数的本身编写
        loadData(completion: {(result) -> () in

          print(result)
        })
    }

    func demo1() {

        // 尾随闭包
        DispatchQueue.global().async { 

            // 嵌套的GCD xcode不会改成尾随闭包
            DispatchQueue.main.async(execute: { 

            })
        }
        // 尾随闭包
        DispatchQueue.main.async { 

        }
    }

    func loadData(completion: (result: [String]) ->()) -> () {

        // 将任务添加到队列,执行任务的操作,队列的调度是以同步/异步执行任务
        DispatchQueue.global().async{
            print("耗时操作\(Thread .current())")
            // 休眠
            Thread.sleep(forTimeInterval: 1.0)

            // 获得数据
            let json = ["头条","八卦","出大事了"]
            //主线程更新
            DispatchQueue.main.async(execute: {
                print("主线程更新UI\(Thread.current())")

                // 回调,执行,通过参数回调
                completion(result: json)
            })
        }
    }

    // 1.使用变量记录函数

    func demo() {

        let x:Int = sum(x: 20, y: 30)
        print("sum = \(x)")
        // 闭包: 提前准备好代码,需要的时候执行,可以当做参数传递

        // 定义一个常量记录函数 (x: Int, y: Int) -> Int
        let f = sum
        // 在需要的时候执行  在OC是不能实现
        print(f(x: 30, y: 30))

    }

    func sum(x:Int,y: Int) -> Int {

        return x + y
    }

}
时间: 2024-08-14 05:22:16

Swift 3.0 闭包的定义和使用的相关文章

Swift 2.0学习笔记(Day 22)——闭包那些事儿!

?? 原创文章,欢迎转载.转载请注明:关东升的博客 我给Swift 中的闭包一个定义:闭包是自包含的匿名函数代码块,可以作为表达式.函数参数和函数返回值,闭包表达式的运算结果是一种函数类型. Swift中的闭包类似于Objective-C中的代码块.Java中的匿名内部类. 使用闭包表达式 Swift中的闭包表达式很灵活,其标准语法格式如下: { (参数列表) ->返回值类型 in 语句组 } 其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是后面有in关键

[转]Swift 2.0初探:值得注意的新特性

转自http://www.cocoachina.com/swift/20150623/12231.html 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语

Swift 2.0初探:值得注意的新特性

转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不同的是,guard语句只会

swift深入理解闭包

我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值: var string = "A string" 还可以用闭包的方式定义: var string1: String = { return "A string" }() 闭包还可以这么定义,省略了等号和括号: var string2: String { return "A string" } 闭包中可以定义get方法 var str

Swift中的闭包(Closure) 浅析

转载自:http://www.devtalking.com/articles/closure-expressions-in-swift/ 闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事情.这是因为闭包使用的多样性,比如你可以将闭包赋值给一个变量,你也可以将闭包作为一个函数的参数,你甚至可以将闭包作为一个函数的返回值.它的强大之处可见一斑. 在S

Swift学习:闭包(Closures)

/* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类似.* 闭包可以捕获和存储上下文中定义的的任何常量和变量的引用.这就是所谓的变量和变量的自封闭,* 因此命名为”闭包“(“Closures)”).Swift还会处理所有捕获的引用的内存管理.** 全局函数和嵌套函数其实就是特殊的闭包.* 闭包的形式有:* (1)全局函数都是闭包,有名字但不能捕获任何

Swift中的闭包(Closure)[转]

闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事情.这是因为闭包使用的多样性,比如你可以将闭包赋值给一个变量,你也可以将闭包作为一个函数的参数,你甚至可以将闭包作为一个函数的返回值.它的强大之处可见一斑. 在Swift的很多文档教材中都说函数是“一等公民”,起初我还不是很理解“一等公民”是什么意思,但当我理解了闭包以及它的强大功能后,我恍然大悟.

Swift入门篇-闭包和函数

今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 =函数名 说明: 1:函数名 表示函数地址 2:(类型)->返回值 表示函数类型 3:函数类型必须和函数名的参数和返回值一致 例子 /* 1:func 是函数关键字 2:Say是函数名,表示函数的地址 3:Say函数 参数是整形 返回值为布尔类型 */ func Say(num:Int)->Bo

Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。

闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为您管理在 捕获 过程中涉及到的内存操作. 注意:如果您不熟悉 捕获 (capturing) 这个概念也不用担心,后面会详细对其进行介绍. 在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的