2016-04-19 11 views
6

let _ = ...を使用しても何の目的もありませんか?"let _ = ..."(アンダースコアは等しくなります)はSwiftで使用できますか?

私はWhat's the _ underscore representative of in Swift References?の質問と回答を見ており、アンダースコアはcan be used to represent a variable that isn't neededです。私は上記のリンクからの例のようにタプルの一つの値を必要な場合、これは理にかなって

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 
} 

Iドン:しかし

let (result, _) = someFunctionThatReturnsATuple() 

は、私は最近this codeに出くわしましたlet _ =を削除しただけでコンパイラの警告やエラーが出ない。これは、これがよりシンプルで読みやすいように思えます。

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

コードの作成者はa book and a blog about Swiftです。私は著者が間違いがないことを知っていますが、私には何かがないか不思議に思っていました。この方法は、developer documentationからwarn_unused_resultでマークされている場合は、コンパイラの警告が表示されます

+1

未使用の結果についてのコンパイラの警告を避けるために、「_」への代入が必要な場合の例を次に示します。http:// stackoverflow。 com/a/32788209/1187415 –

+1

要するに、 'let _ ='はプログラマがメソッド呼び出しの結果を無視したいことを明示的に明確にします。 – Sulthan

+0

'let'は' _'に代入するときはオプションのようです。ブログの作者はそれを両方の方法で行います。 – vacawama

答えて

6

は、コンパイラを持っているメソッドや関数の宣言に、この属性を適用する方法や関数ときに警告を発しますその結果を使わずに呼び出されます。

この属性を使用すると、突然変異する相手を持つ非突然変異メソッドの不正使用に関する警告メッセージを表示できます。

+0

'let _ ='を使うと、基本的にコンパイラは結果を使っていると思ってしまうでしょうし、 'warn_unused_result'とマークされていても警告は出ませんか? – Suragch

+0

これは間違いありませんが、ドキュメントに記載されているところでは、この方法を間違って使用している可能性があります。 – sbarow

+6

@Suragch 'let _ ='を使うのは、コンパイラを欺くのではなく、この値を使うべきだが、あなたはそれを使わないことを選択したことを知らせるということです。 – Valentin

3

時にはそれはあなたがスロー何かを呼び出すときに、シンプルかつdo-catchよりtry?を使用するクリーナーですが、任意のエラーを処理しないことを決定しました。 try?のままにしておくと、コンパイラは未使用の結果について警告しますが、これは良くありません。したがって、_を使用して結果を破棄することができます。

例:

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

let _ = ...を使用して、具体的にあなたが右の式は値を返しますが、あなたはそれを気にしないということを知っているコンパイラに指示します。

このメソッドにwarn_unused_resultとマークされているインスタンスでは、アンダースコアを使用しないと、コンパイラは警告を表示します。

+0

非常に良い説明。 – VSG24

関連する問題