Menu
Woocommerce Menu

基础语法之for,闭包表达式

0 Comment

以下翻译自Apple官方文档,结合自己的理解记录下来。翻译基于 swift 3.0.1

闭包表达式语法有如下的一般形式:

// oc 写法

原文地址

 { (parameters) -> returnType in statements }

//for (int i = 0;i<10;i++){

Closures are self-contained blocks of functionality that can be passed
around and used in your code. Closures in Swift are similar to blocks
in C and Objective-C and to lambdas in other programming languages.

闭包表达式参数 可以是 in-out
参数,但不能设定默认值。也可以使用具名的可变参数(但是如果可变参数不放在参数列表的最后一位的话,调用闭包的时时编译器将报错。)

//

闭包是一个单独的功能性代码块,可以在你的代码中传递和使用。

  • 举个例子

//}

Closures can capture and store references to any constants and
variables from the context in which they are defined. This is known as
closing over those constants and variables. Swift handles all of the
memory management of capturing for you.

// swift写法

// for后面的()小括号可以省略

// for in写法

闭包可以捕获并且存储任意的变量和常量,前提是这些变量和常量是在闭包定义的上下文中。这个被叫做closing
over这些变量和常量。swift为你负责处理所有为捕获常量和变量的内存管理。

var names = ["Jack", "Bob", "Tom", "Alen", "James",] var sortedArray = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2})

for i in 0 ..< 10{

NOTEDon’t worry if you are not familiar with the concept of capturing.
It is explained in detail below in Capturing Values.

Global and nested functions, as introduced in Functions, are actually
special cases of closures. Closures take one of three forms:

闭包的函数体部分由关键字 in
引入。该关键字表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始。

print

全局和嵌套函数事实上是闭包的特殊情况,闭包有以下三种形式:

  1. 根据上下文推断类型因为排序闭包函数是作为 sorted
    方法的参数传入的,Swift 可以推断其参数和返回值的类型。 sorted
    方法被一个字符串数组调用,因此其参数必须是 (String, String) ->
    Bool 类型的函数。这意味着 (String, String) 和 Bool
    类型并不需要作为闭包表达式定义的一部分。因为所有的类型都可以被正确推断,返回箭头和围绕在参数周围的括号也可以被省略:reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )

  2. 单表达式闭包隐式返回单行表达式闭包可以通过省略 return
    关键字来隐式返回单行表达式的结果,如上版本的例子可以改写为:reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

}

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图