Swift 之闭包

闭包
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 类型值。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容