【问题标题】:How to capture the return value of a closure如何捕获闭包的返回值
【发布时间】:2021-03-15 16:53:24
【问题描述】:

我知道闭包捕获给定环境中的值。那不是我的问题。我的问题是如何捕获闭包的返回值。例如,如果我使用闭包作为参数,例如:

  func myClosure(yourAge x: Int, completion: (Int) -> String) {
    if x == 4 {
        completion(x)
    }
}

然后说:

    let answer = myClosure(yourAge: 4) { x in
    return "You're just a baby"
}

警告是:

Constant 'answer' inferred to have type '()', which may be unexpected

我理解这个警告。几乎answer 根本不是答案。它将是Void 或()

现在,如果我让整个函数返回一个字符串,例如:

   func myClosure(yourAge x: Int, completion: (Int) -> String) -> String {
    completion(x)
}

那么我当然可以在属性中捕获结果:

    let answer = myClosure(yourAge: 4) { x in
   
    if x < 10 { return "You're just a baby"}
    else {
        return "You can play the game"
    }
}

也许我只是在这里回答了我自己的问题,但是是否没有简单的方法可以将闭包的返回值放入属性中,或者我以非预期的方式使用它?

【问题讨论】:

    标签: swift closures


    【解决方案1】:

    如果您想纯粹使用闭包(而不是接受闭包的函数)来执行此操作,您可以执行以下操作:

    let myClosure: (Int) -> String = { age in
        if age < 10 {
            return "You're just a baby"
        }
        else {
            return "You can play the game"
        }
    }
    
    let answer = myClosure(4) // "You're just a baby"
    

    【讨论】:

    • 我想我的问题是我在问如何捕获 closure 的返回值,但我真的想捕获 function 的返回值,并将 Void 作为返回类型跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多