2017-03-02 22 views
0

私はSwiftでguardキーワードを使用する方法を探していました。最近、開発者は、閉鎖にエラーがない場合、以下のコードは "成功" を印刷すると私に言った。スウィフトガードの適切な使用?

for attachment in attachments! { 
    attachment.fetchData { (data, error) in 
     guard let error = error else { 
      print(“success”) 
      return 
     } 

     print(error.localizedDescription) 
} 

私は彼の声明で少し混乱しています。 にエラーがある場合にのみ、彼のコードが "成功"を印刷するように、Appleからクロージャーとガードのキーワード文書を読んだ後、

彼は逆にそれを使っているような気がしますが、私は間違っている可能性があります。 誰かが私のためにそれを打ち破り、エラーがあったときに成功したかどうかを説明することができますか?

ありがとうございます。

+0

。ガードステートメントは、ガード条件が偽(または、ガードレットの場合は変数がnil)のときに入力されます。 – dan

+0

@dan - エラーがエラーと同じではない場合、またはエラーがない場合(エラーはnil)、成功を読み取ります。ありがとうございました。 if文のように、文が真であればガード条件を入力すると思った。私が受け入れる答えを提出しますか? – BlueishVelvet

+0

幸せな実行パスのロジックをカプセル化するために 'guard'を使用するべきではありません。この場合、代わりに 'if let'を使用し、エラーを印刷してそこに戻すことができます。あるいは、 'error'ではなく' data'に 'guard let'を使用してください。他 – Hamish

答えて

0

エラーをアンラップするためのガードを使用することは非常に紛らわしいです。データをラップし、エラーがないことを確認し、エラーが発生した場合にはメソッドを早期に終了する必要があります。

だけに、あなたのガード文を変更します。エラーがないときの成功が印刷さ

guard let data = data, error == nil else { 
    print(error ?? "") 
    return 
} 
+0

@LeoDabusありがとうございます。 – BlueishVelvet

+0

あなたは大歓迎です –