返回

Swift- Closures 闭包(2)进阶篇

IOS

尾随闭包调用逻辑

常规情况下,尾随闭包会紧跟在闭包参数后面,组成以下形式:

func someFunction(closure: (Int, Int) -> Int) {
    // 函数体
}

someFunction(closure: { (a: Int, b: Int) -> Int in
    return a + b
})

这里 { (a: Int, b: Int) -> Int in ... } 是一个尾随闭包,它接收两个 Int 类型的参数并返回一个 Int 类型的结果。

但是,在 Swift 中,我们可以通过省略闭包参数类型和 return 来简化尾随闭包的写法:

func someFunction(closure: (Int, Int) -> Int) {
    // 函数体
}

someFunction(closure: { (a, b) in a + b })

简写形式

在 Swift 中,我们可以进一步简化尾随闭包的写法,省略闭包参数名称和 in

func someFunction(closure: (Int, Int) -> Int) {
    // 函数体
}

someFunction(closure: { $0 + $1 })

这种写法将闭包参数直接作为表达式使用,更加简洁明了。

测试题

  1. 以下代码输出什么?
func addTwoNumbers(a: Int, b: Int) -> Int {
    return a + b
}

func printResult(result: Int) {
    print("The result is \(result)")
}

printResult(result: addTwoNumbers(a: 1, b: 2))
  1. 以下代码输出什么?
func addTwoNumbers(a: Int, b: Int) -> Int {
    { (a: Int, b: Int) -> Int in
        return a + b
    }(a, b)
}

print(addTwoNumbers(a: 1, b: 2))
  1. 以下代码输出什么?
func addTwoNumbers(a: Int, b: Int) -> Int {
    { $0 + $1 }(a, b)
}

print(addTwoNumbers(a: 1, b: 2))

答案

  1. 3
  2. 3
  3. 3

总结

本篇文章深入剖析了 Swift 中闭包的进阶知识,包括正常的尾随闭包调用逻辑、闭包简写形式以及相关测试题。涵盖了闭包的基础语法和使用场景,文章有助于读者全面掌握 Swift 闭包的使用技巧,为后续的代码块、委托、高阶函数等主题学习打下坚实的基础。