美文网首页
Swift 之闭包

Swift 之闭包

作者: 雨燕oc | 来源:发表于2017-04-06 17:55 被阅读0次

闭包
1.闭包表达式语法

{ (parameters) -> return type in

    statements

}

2.闭包和类的强引用

当将一个闭包赋值给一个类实例的属性,并且闭包体捕获这个实例时,也可能存在一个强引用循环。捕获实例是因为闭包体访问了实例的属性,就像self.someProperty,或者调用了实例的方法,就像self.someMethod()。不管哪种情况,这都造成闭包捕获self,造成强引用循环。
闭包之sort函数

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

// Sort函数

func backwards(s1: String, s2: String) -> Bool { return s1 > s2 }

var reversed = sorted(names, backwards)

// 闭包:-表达式语法

reversed = sorted(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } )

// 闭包:-根据上下文推断类型

reversed = sorted(names, { s1, s2 in return s1 > s2 } )

// 闭包:-单行表达式闭包可以省略 return

reversed = sorted(names, { s1, s2 in s1 > s2 } )

// 闭包:参数名简写

reversed = sorted(names, { $0 > $1 } )

// 闭包:-运算符函数

reversed = sorted(names, >)

//闭包: Trailing 闭包

reversed = sorted(names) { $0 > $1 }

闭包 之 map函数

1. Swift 的 Array 类型有一个 map 方法,其获取一个闭包表达式作为其唯一参数。数组中的每一个元素调用一次该闭包函数,并返回该元素所映射的值(也可以是不同类型的值)。

2. let digitNames = [ 0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"]

let numbers = [16, 58, 510]

let strings = numbers.map {

      (var number) -> String in 

     var output = ""

     while number > 0 { output = digitNames[number % 10]! + output

     number /= 10 }  

     return output

}

// 字典 digitNames 下标后跟着一个叹号 (!),因为字典下标返回一个可选值 (optional value),表明即使该 key不存在也不会查找失败。 在上例中,它保证了 number % 10 可以总是作为一个 digitNames 字典的有效下标 key。 因此叹号可以用于强展开 (force-unwrap) 存储在可选下标项中的 String 类型值。

相关文章

  • swift闭包学习

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

  • Swift-闭包

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

  • Swift闭包和函数

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

  • swift4 闭包

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

  • Swift中的闭包

    在Swift中有两种闭包,逃逸闭包(@escaping)和非逃逸闭包(@nonescaping)。从Swift 3...

  • 100 Days of Swift - Day 06 - 闭包(

    100 Days of Swift - Day 06 - 闭包Closures 6.1 闭包 Swift函数也属于...

  • swift学习

    * 闭包 * 闭包作为属性 ```swift // 声明闭包类型 typealias callba...

  • iOS swift 逃逸闭包(@escaping)和非逃逸闭

    iOS swift 逃逸闭包(@escaping)和非逃逸闭包 (@noescaping) 逃逸闭包: 逃逸闭包...

  • iOS&Swift&OC 闭包和Block的相互转化

    一、Swift的闭包 -> OC的block 二、OC的block -> Swift的闭包

  • Swift学习笔记(1)

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

网友评论

      本文标题:Swift 之闭包

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