【问题标题】:Guard with trailing closure - Swift Syntax带有尾随闭包的 Guard - Swift 语法
【发布时间】:2021-01-28 08:27:12
【问题描述】:

假设我有一个函数,它的最后一个参数是闭包,所以它可以缩短为这样的:

let reminder = reminders.first { (reminder) -> Bool in
    return reminder.mealIdentifier == mealIdentifier
}

太棒了!现在假设我想把它放在guard 语句中,如下所示:

guard let reminder = reminders.first { (reminder) -> Bool in
    return reminder.mealIdentifier == mealIdentifier
} else {
    continue
}

我这样做的那一刻,编译器开始尖叫。解决方法是在调用函数时不使用尾随闭包短语法,但是当您的最后一个参数是闭包时,Xcode 的默认自动完成没有选项不执行尾随闭包短语法,这很麻烦:

guard let reminder = reminders.first(where: { (reminder) -> Bool in
   return reminder.mealIdentifier == mealIdentifier
}) else {
    continue
}

这里有什么我遗漏的吗?或者有没有办法让 Xcode 在没有缩短语法的情况下自动完成?

【问题讨论】:

    标签: swift xcode closures


    【解决方案1】:

    或者有没有办法让 Xcode 在不缩短语法的情况下自动完成?

    Xcode 非常聪明。如果您在需要{ 的控制流语句中执行自动完成,它会选择非尾随闭包版本。例如,如果我输入:

    guard let a = reminders.first
    

    自动完成显示:

    如果我选择突出显示的选项,我会得到:

    guard let a = reminders.first(where: <#T##(String) throws -> Bool#>)
    

    如果我按下回车键,我会得到:

    guard let a = reminders.first(where: { (<#String#>) -> Bool in
        <#code#>
    })
    

    它不会把它变成一个尾随闭包,只要你在一个 guard/if 语句中自动完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-14
      • 2021-02-07
      • 2020-10-09
      • 2018-03-27
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多