2017-07-07 8 views
1

何か問題が発生した場合、オブジェクトをパーズサービスに保存するときにチェックしようとしています。しかし、私には2つの選択肢があり、3つの選択肢があり、違いは分かりません。私はこれらの3つのオプションを持っています(error == nil、object!= nil、error == nil、object!= nilの場合)。どちらを使うべきですか?おかげerror == nil parse swift

オプション#1

let user = PFUser.current()! 
user.saveInBackground (block: { (success:Bool, error:Error?) -> Void in 
    if error == nil{ 
    } 
)} 

オプション#2

let user = PFUser.current()! 
user.saveInBackground (block: { (success:Bool, error:Error?) -> Void in 
    if object != nil{ 
    } 
)} 

オプション#3

let user = PFUser.current()! 
user.saveInBackground (block: { (success:Bool, error:Error?) -> Void in 
    if error == nil && object != nil{ 
    } 
)} 
+0

ヒント: '(ブロック:' 'ことができるように、一緒に実際に最後でなければならない括弧)と(除去することができる - > Void'を除去し、クロージャ引数の型注釈さ – idmean

答えて

0

ガードステートメントを使用することをお勧めします。状況。

//Always safely unwrap optional value: 
    if let user = PFUser.current(){ 

    user.saveInBackground (block: { (success:Bool, error:Error?) -> Void in 

     guard success, error == nil else { 
     //handle error somehow...(print or whatever...) 
     return 
     } 
     //Continue here as everything is fine... 

    )} 
} 
+0

缶私はブロック(オブジェクト、エラー)の中に何があるかを尋ねます。上記のガードソリューションを使用することはできますか?私に知らせていただきたいので、上記のソリューションの1つにチェックマークを付けてください。 – ahmed

+0

オブジェクト 'user.saveInBackground(ブロック::{(成功:ANYOBJECT?エラー:あなたはこのようにあまりにもガードでそれをアンラップすることができ、オプションです?エラー) - >ボイド 0でガードのletオブジェクト=オブジェクト、エラー== nilで{ //ハンドルエラー何とか...(印刷または何でも...) リターン } プリント(オブジェクト) //オブジェクトはそう何をする今開封されていますあなたは欲しい。 //すべてが正常であるため、ここに続行してください... ) 「 –

+0

申し訳ありませんが、コメントではマークダウンが壊れているようです。答えのコードをコピーしてインデント/スペースを作成するだけです –

0

より良い成功のために、失敗のために別のハンドラを使用するには:

func saveInBackground(success:() -> Void, failure: (Error?) -> Void) { 
    /* do whatever you need */ 
    if saved { 
     success() 
    } else { 
     failure(saveError) 
    } 
} 

saveInBackground(success: { 
    /* saving was succeed */ 
}, failure: { (error) in 
    /* saving was failed */ 
}) 
0

一般的な経験則として、保存操作が成功するとエラーは発生しません。これは実装の次のステップに依存します。どちらのアプローチも無効ですが、私はまだあなたが「ハッピーバリュー」のオブジェクト、成功したdtcをチェックすることをお勧めします...エラーを確認する前に