美文网首页
(十三) [Swift]Swift中的Closure

(十三) [Swift]Swift中的Closure

作者: 修行猿 | 来源:发表于2016-08-09 07:38 被阅读23次

1.完整的定义一个closure

var addClosure : (Int,Int) ->Int = {
    (a:Int,b:Int)
    in
    return a + b
}

省略参数类型

addClosure = { a,b in return a + b}

单语句closure可以省略return

addClosure = { a,b in a + b}

终极简化,将参数用$1,$2的形式简化

addClosure = { $0 + $1 }

2.closure入参,并与函数相比较

func excute(a:Int,_ b:Int,operation:(Int,Int)->Int) -> Int {
    return operation(a,b)
}
func multi(a:Int,_ b:Int) -> Int{
    return a * b
}

//closure入参

excute(1, 2, operation: addClosure)

//函数入参
excute(1, 2, operation: multi)

closure 匿名入参

excute(1, 2, operation: {a,b in a + b})

closure 匿名入参 简化

excute(1, 2, operation: { $0 + $1 })

closure 匿名入参,如果closure参数在最后一个,则可以将closure写在函数的参数列表的外边

excute(1, 2) { (a, b) -> Int in
    a + b
}

excute(1, 2) { $0 + $1 }

3.如果closure没有返回值,则必须标明Void 而不能像函数一样省略

let addClosure2 : (Int,Int) -> Void = {
  print($0 + $1)
}

4.捕获变量,closure可以捕获变量

func counting() -> () ->Int {
    var count = 0 ;
    let incrementCount : ()->Int = {
        count += 1
        return count
    }
    return incrementCount;
}

var c1 = counting()
c1()   //1
c1()   //2
c1()   //3

var c2 = counting()
c2()   //1
c2()   //2
c2()   //3

其实func也可以

func counting2() -> () ->Int {
    var count = 0 ;
    func incrementCount() ->Int {
        count += 1
        return count
    }
    return incrementCount;
}
var c21 = counting2()
c21()   //1
c21()   //2
c21()   //3

var c22 = counting2()
c22()   //1
c22()   //2
c22()   //3

5.closure和函数相比

  • closure就是一个没有名字的函数
  • closure可以没有名字
  • closure不能省略Void

相关文章

  • (十三) [Swift]Swift中的Closure

    1.完整的定义一个closure 省略参数类型 单语句closure可以省略return 终极简化,将参数用$1,...

  • Swift学习笔记

    swift学习笔记01: “一等公民“ func & closure 先来几个函数: 在swift中,我们可以这样...

  • 十二月第三周

    1.swift中closure与OC中block的区别?1>、closure是匿名函数、block是一个结构体对象...

  • Swift中的Closure

    结论:Swift closures capture a reference to the outer variab...

  • Swift closure & higher order fun

    正在学swift以及iOS,学习过程中发现swift语言中有许多精妙之处。上课时closure这个swift的精华...

  • Swift中的闭包详解

    转载自:Swift中的闭包(Closure) 概念 闭包在Swift中非常有用。通俗的解释就是一个Int类型里存储...

  • swift closure

    官方https://developer.apple.com/library/content/documentati...

  • Closure in Swift

    跟Block很像,表示代码的集合,简称代码块。 可以被传递,不会马上被执行,当然后期可以被执行多次。 NSURLS...

  • Swift Closure

    Closure是自包含的代码块,可以在代码中传递和使用,类似于OC中的Block。Closure可以捕获或者存储定...

  • 《Using Swift with Cocoa and Obje

    Swift 中的 Closure 与 Objective-C 中的 Block 有一个显著的区别,就是 Closu...

网友评论

      本文标题:(十三) [Swift]Swift中的Closure

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