Swift-闭包的简单使用

public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

参数是一个闭包

使用如下:

let array = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"]

// 当闭包作为最后一个参数的时候, 可以省略小括号  '()'
array.map(){
    value -> String in
    return value+"aaa"
}

array.map { 
    value -> String in
    return value + "batac"
}

// 当只有一行代码时, 可以省略 return 关键字
array.map{
    value -> String in
    value+"CCC"
}

// 还可以省略返回类型等, 使用$0 标注第几个参数
array.map{
    $0+"aaa"
}
var nums = [10, 100, 4, 102, 40, 30, 20, 15, 1]
nums.sort(by: cmp)
// [102, 100, 40, 30, 20, 15, 10, 4, 1]

nums.sort { (v1, v2) -> Bool in
    return v1 > v2
}
// [102, 100, 40, 30, 20, 15, 10, 4, 1]

nums.sort { (v1, v2) -> Bool in
    v1 > v2
}
// [102, 100, 40, 30, 20, 15, 10, 4, 1]

nums.sort {
    $0 > $1
}
// [102, 100, 40, 30, 20, 15, 10, 4, 1]


nums.sort {
    $0 < $1
}
// [1, 4, 10, 15, 20, 30, 40, 100, 102]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Swift中,闭包是一种自包含的功能块,类似于函数,但与函数不同,它们可以在任何地方使用,并且可以捕获并存储其所在上下文的任何常量和变量。闭包可以作为参数传递给函数,也可以从函数中返回,并且它们可以在不创建命名函数的情况下使用闭包的语法通常包含花括号,它们用于包装一个或多个语句,表示代码块。闭包可以带有参数,这些参数可以是具有类型标注的常量或变量。闭包可以返回值,这些值可以是任何类型,包括函数类型。 下面是一个简单闭包示例,它接受两个Int类型的参数并返回它们的和: ``` let sum = { (a: Int, b: Int) -> Int in return a + b } ``` 在上面的例子中,我们使用花括号表示一个代码块,然后使用参数列表`(a: Int, b: Int)`定义参数,最后使用`-> Int`定义返回类型。代码块中的最后一行使用`return`语句返回结果。 闭包还有另外一种更简洁的语法形式,称为尾随闭包。尾随闭包是在函数调用的括号之外写的闭包,这样可以提高代码的可读性。例如: ``` func doSomething(completion: () -> Void) { // 做一些事情... completion() } doSomething { // 这是一个尾随闭包 print("完成") } ``` 在上面的示例中,我们将一个没有参数和返回值的闭包作为`doSomething`函数的参数传递,然后使用尾随闭包的语法形式将闭包作为函数调用的最后一个参数传递。在这个闭包中,我们只是简单地打印一条消息。 闭包还可以捕获并存储其所在上下文的常量和变量。这被称为闭包的捕获语义。例如: ``` func makeCounter() -> () -> Int { var count = 0 return { count += 1 return count } } let counter1 = makeCounter() let counter2 = makeCounter() print(counter1()) // 输出: 1 print(counter1()) // 输出: 2 print(counter2()) // 输出: 1 print(counter2()) // 输出: 2 ``` 在上面的示例中,我们定义了一个`makeCounter`函数,该函数返回一个没有参数和返回值的闭包。该闭包有一个`count`变量,该变量在每次调用闭包时递增。由于闭包可以捕获其所在上下文的变量,因此每个返回的闭包都会共享相同的`count`变量。所以,当我们通过`counter1`和`counter2`调用闭包时,它们都会递增`

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值