Swiftではデータストアやファイルストアへのアクセス時に同期、非同期のどちらかを選べます。それぞれ実装方法や挙動が異なりますので注意してください。
同期処理
同期処理はネストが深くならないので、コードが見通しよく書けるのが特徴です。
var error : NSError? file.save(&error) if error != nil { // アップロード失敗 print(error ?? "") } else { // アップロード成功 }
例えば以下のようにも書けますが、これはエラーメッセージを受け取っていないだけで、同期処理なのは変わりません。
file.save(nil)
非同期処理
非同期処理の場合、メソッド名として saveInBackground
を指定します。以下はその例です。
file.saveInBackground({(error) in if error != nil { // 保存失敗時の処理 print(error ?? "") } else { // 保存成功時の処理 print(NSDate(), "アップロード完了") } }, progressBlock: {(int: Int32) in print(int) }); print(NSDate(), "アップロード開始")
この場合、まずアップロード開始というメッセージが表示されます。その後アップロード完了というメッセージが表示されます。
同期中の動作について
同期処理で実装した場合、アップロードが完了するまで(または失敗するまで)画面が固まった状態になってしまいます。UXとしていいものではありませんので、非同期処理の方が安全と言えます。特にファイルストアのようなサイズの大きいネットワーク処理を行う場合には注意しなければなりません。
非同期処理を続けるとコールバック地獄になりますので、malcommac/HydraやPromise風に扱えるライブラリを使うのが良いでしょう。