美文网首页
Swift 中闭包的学习

Swift 中闭包的学习

作者: IT界的古天乐 | 来源:发表于2018-05-30 08:39 被阅读7次

/*

Swift 中的闭包有很多优化的地方

1 根据上下文推断参数和返回值的类型

2 从单行表达式闭包中隐式返回 可以省略return

3 可以使用简化的参数如 $0 $1 意为从0或者1开始

4 提供了尾随闭包的语法

*/

//语法   parameters参数 return 隐藏了

//{(parameters) -> return type in

//    parameters

//}

//最简单的闭包//省略in的

let b = {

    print("这也是闭包")

}

//用变量记录函数 (带参数的闭包)

//带有参数的闭包

//参数返回值 实现代码  {形参->返回值 in 代码}

//带参数待返回值的闭包

let countNum = {(num1:Int,num2:Int)->Int in

    return num1+num2;

}

let count1 = countNum(2,3)

//闭包的应用场景

/*异步执行完成回调  控制器之间的回调  自定义视图的回调*/

/*  以下代码需要在项目中的.Swift文件中完成

override func viewDidLoad() {

super.viewDidLoad()

loadData { (result) in

print("获取json信息\(result)")

}

// Do any additional setup after loading the view, typically from a nib.

}

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

DispatchQueue.global().async {

print("耗时操作\(Thread.current)")

Thread.sleep(forTimeInterval: 1.0);

let json=["12","23","34"]

DispatchQueue.main.async(execute: {

print("主线程\(Thread.current)")

completion(json)

})

}

}

结果为:耗时操作{number = 3, name = (null)}

主线程{number = 1, name = main}

获取json信息["12", "23", "34"]

*/

//闭包表达式

let names = ["s","b","e","h","f"]

func backwards(a1:String,a2:String)->Bool{

    return a1

}

// public func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]

var result = names.sorted(by:backwards)

print(result)

//参数名缩写

///以上代码还可以  Swift自动内联函数提供了参数名称缩写功能,您可以直接通过$0,$1,$2来顺序调用闭包的参数。

var result1 = names.sorted(by:{$0<$1})

print(result1)

//作为一个函数接受两个String类型的参数并返回Bool类型的值Swift可以自动推断出您想使用大于号的字符串函数实现:

//运算符函数

var result2 = names.sorted(by:<)

print(result2)

//尾随闭包

//例子1  尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。

var result3 = names.sorted(){$0<$1}

print(result3)

//例子2

//此时点回车函数会变成中括号的形式 也就是说如果函数的最后一个参数是闭包,函数的参数可以提前结束

//        最后一个参数直接使用{}来包装闭包的代码

//        loadData1(completion: <#T##([String]) -> ()#>)

//以下两段代码相同只不过一个是使用尾随闭包的写法

/*func loadData(completion:@escaping (_ result:([String])->())->()){

    DispatchQueue.global().async {

        print("耗时操作\(Thread.current)")

        Thread.sleep(forTimeInterval: 1.0);

        let json=["12","23","34"]

        //以下两段代码相同只不过一个是使用尾随闭包的写法

        DispatchQueue.main.async{

            print("主线程\(Thread.current)")

            completion(json)

        }

        DispatchQueue.main.async(execute: {

            print("主线程\(Thread.current)")

            completion(json)

        })

    }

}

*/

相关文章

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • Swift5.x-枚举(中文文档)

    引言 继续学习Swift文档,从上一章节:闭包,我们学习了Swift闭包相关的内容,如闭包的定义和使用、闭包的简写...

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • swift中的闭包

    swift中的闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。swift中的闭包与C和Objective...

  • Swift总结

    1.闭包 swift中的闭包类似于oc中的block回调,但是swift的闭包有很多种写法,具有多变性,今天就来总...

  • swift 闭包(闭包表达式、尾随闭包、逃逸闭包、自动闭包)

    闭包是自含的函数代码块,可以在代码中被传递和使用 闭包和swift的对比 Swift 中闭包与OC的 block ...

网友评论

      本文标题:Swift 中闭包的学习

      本文链接:https://www.haomeiwen.com/subject/dgzzjftx.html