"让_ = ..."(让下划线相等)在Swift中有用吗?

Sur*_*gch 9 ios swift

使用是否let _ = ...有任何目的?

在Swift References中看到了什么是_下划线代表的问题和答案我知道下划线可以用来表示不需要的变量.

如果我只需要一个元组的值,就像上面链接中的示例一样,这是有意义的:

let (result, _) = someFunctionThatReturnsATuple()
Run Code Online (Sandbox Code Playgroud)

但是,我最近遇到了这个代码:

do {
    let _ = try DB.run( table.create(ifNotExists: true) {t in
        t.column(teamId, primaryKey: true)
        t.column(city)
        t.column(nickName)
        t.column(abbreviation)
        })

} catch _ {
    // Error throw if table already exists
}
Run Code Online (Sandbox Code Playgroud)

如果我删除了,我不会收到任何编译器警告或错误let _ =.在我看来,这样更简单,更易读.

try DB.run( table.create(ifNotExists: true) {t in
    t.column(teamId, primaryKey: true)
    t.column(city)
    t.column(nickName)
    t.column(abbreviation)
    })
Run Code Online (Sandbox Code Playgroud)

该代码的作者撰写了一本关于Swift的书和博客.我知道作者不是绝对正确的,但它让我想知道是否有我遗失的东西.

sba*_*row 9

如果该方法已经被打上了你会得到一个编译器警告warn_unused_result开发者文档:

将此属性应用于方法或函数声明,以使编译器在调用方法或函数时发出警告而不使用其结果.

您可以使用此属性提供有关错误使用具有变异对应项的非突变方法的警告消息.

  • @Suragch使用`let _ =`不是欺骗编译器,而是让它知道你应该使用这个值,但是你选择不使用它. (10认同)

Sur*_*gch 7

使用let _ = ...具体告诉编译器你知道右边的表达式返回一个值,但你不关心它.

在标记方法的情况下warn_unused_result,如果不使用下划线,则编译器会发出警告.(因为在某些情况下,不使用返回值可能会出错.)