Swift小课

100 Days of Swift - Day 07 - 闭包(

2022-12-16  本文已影响0人  NieFeng1024

100 Days of Swift - Day 07 - 闭包Closures part 2

6.6 有参闭包作为函数参数

func travel(action: (String) -> Void) {
    print("I'm getting ready to go.")
    // 4. 函数体调用闭包
    action("London")
    print("I arrived!")
}
let parameterBlock = { (place: String) in
    // 5. 执行闭包,使用闭包传入的参数
    print("I'm going to \(place) in my car")
}
travel(action: parameterBlock)
 I'm getting ready to go.
 I'm going to London in my car
 I arrived!

6.7 有返回值闭包作为函数参数

func travel(action: (String) -> String) {
    print("I'm getting ready to go.")
    // 4. 调用闭包使用参数,并接收闭包返回值
    let description = action("London")
    print(description)
    print("I arrived!")
}
let returnValueBlock = { (place: String) -> String in
    // 5. 执行闭包,使用闭包传入的参数,并返回一个数据
    return "I'm going to \(place) in my car"
}
travel(action: returnValueBlock)

6.8 简化闭包

func travel(action: (String) -> String) {
    print("I'm getting ready to go.")
    // 3. 调用闭包使用参数,并接收闭包返回值
    let description = action("London")
    print(description)
    print("I arrived!")
}
travel { (place: String) -> String in
    return "I'm going to \(place) in my car"
}
travel { place -> String in
    return "I'm going to \(place) in my car"
}
travel { place in
    return "I'm going to \(place) in my car"
}
travel { place in
    "I'm going to \(place) in my car"
}
travel {
    "I'm going to \($0) in my car"
}
 I'm getting ready to go.
 I'm going to London in my car
 I arrived!
 I'm getting ready to go.
 I'm going to London in my car
 I arrived!
 I'm getting ready to go.
 I'm going to London in my car
 I arrived!
 I'm getting ready to go.
 I'm going to London in my car
 I arrived!
 I'm getting ready to go.
 I'm going to London in my car
 I arrived!

6.9 多参数闭包

func travel(action: (String, Int) -> String) {
    print("I'm getting ready to go.")
    let description = action("London", 60)
    print(description)
    print("I arrived!")
}
travel {
    "I'm going to \($0) at \($1) miles per hour."
}

6.10 闭包作为函数返回值

func travel() -> (String) -> Void {
    return {
        print("I'm going to \($0)")
    }
}
let result = travel()
result("London")
travel()("London")

6.11 闭包捕获外部变量

func travel() -> (String) -> Void {
    var counter = 1
    
    return {
        print("\(counter). I'm going to \($0)")
        counter += 1
    }
}
let result = travel()
result("London")
result("London")
result("London")
 1. I'm going to London
 2. I'm going to London
 3. I'm going to London

6.12 小结

声明:本文创作来自hackingwithswift

上一篇 下一篇

猜你喜欢

热点阅读