“让_ = …”(让下划线相等)在Swift中有什么用处?

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

我已经看到问题和答案是什么_下划线代表在Swift的参考? 我知道下划线可以用来表示一个不需要的variables 。

如果我只需要一个元组的值,那么这将是有道理的,

 let (result, _) = someFunctionThatReturnsATuple() 

不过,我最近遇到这样的代码 :

 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 } 

我没有得到任何编译器警告或错误,如果我只是删除let _ = 。 在我看来,这是更简单,更具可读性。

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

代码的作者写了一本关于Swift的书和博客 。 我知道作者并不是绝对可靠的,但是却让我怀疑是否有什么东西丢失了。

如果方法已经从开发者文档中标记为warn_unused_result ,将会得到编译器警告:

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

您可以使用此属性提供有关具有变异对象的非变更方法的错误用法的警告消息。

有时使用简单而干净的try? 当你打电话的时候,却决定不处理任何错误。 如果你打电话try? 那么编译器会提醒你关于未使用的结果,这是不好的。 所以你可以放弃使用_结果。

例:

 let _ = try? NSFileManager.defaultManager().moveItemAtURL(url1, toURL: url2) 

使用let _ = ...明确地告诉编译器,你知道右边的expression式返回一个值,但你不关心它。

在使用warn_unused_result标记方法的情况下,如果不使用下划线,那么编译器会报警。 (因为在某些情况下,不使用返回值可能是错误的。)