• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift3.0闭包的定义和使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
//
//  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
    }

}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
33个2017年必须了解的iOS/swift开源库第三方库发布时间:2022-07-13
下一篇:
UIDatePicker在swift中的使用发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap