2016-11-18 14 views
-1

私は、ネットワークから時間間隔(startDate、endDate)のデータを読み込んでイメージを返すAPIを作成しています。関数コールバック/ベストプラクティス

機能(loadData)が成功または失敗のコールバックを実行せずに返されることがありますか?

私の場合、この時間間隔のデータを既にロードしている場合、loadDataは単に返します。

良い方法ではないと思います。 また、私はこの場合に漏れを尋ねています。

EDIT:ここでは私のコードです:

func loadImageFromWebService(startDateISO8601: String, endDateISO8601: String, startCallback: (() -> Void)?, successCallback: ((UIImage?) -> Void)?, failureCallback: ((Error) -> Void)?) { 

     let operationKey = makeOperationKey(forTimeIntervals: startDateISO8601, endDateISO8601) 

     guard isOperationAlreadyLaunched(operationKey) == false else { return } 

     startCallback?() 

     let networkTask = WEB_SERVICE_MANAGER.getData(startDateISO8601: startDateISO8601, endDateISO8601: endDateISO8601, successCallback: { [ weak self ] data in 

      let image = self?.makeImageWithData(data) 
      successCallback?(image) 

      }, // Success Callback 
      failureCallback: { [ weak self ] error in 
       self?.setNetworkTask(nil, forOperationKey: operationKey) 
       failureCallback?(error) 
      } // Failure Callback 
     ) 

     self.setNetworkTask(networkTask, forOperationKey: operationKey) 
    } 

あなたが何かアドバイスはありますか?

おかげにより、発信者が知る必要のある情報である「操作は、すでに発売されている」に戻って

+1

あなたのコードについて話しないでください。 _Show_あなたのコード。 – matt

+0

ここに私のコードです。 – thierryb

答えて

0

。単に何も返さず、どちらのコールバックも呼び出さないのは、貧弱な設計です。呼び出し元は、なぜ起こったのか分かりません。

あなたは3つのオプション(いずれかを選択)持っている:本当に失敗がなかったので、

  1. は成功コールバックを呼び出します。
  2. 障害が "既に起動された"ステータスによることを示す「エラー」を含む障害コールバックを呼び出します。
  3. loadImageFromWebService...メソッドのシグネチャを変更してブール値を返します。 falseを返すと、操作がすでに進行中であるため、処理できなかったことを示します。それ以外の場合はtrueを返します。つまり、falseを返すと、2つのコールバックのどちらも呼び出されません。 trueを返すと、最終的に2つのコールバックのうちの1つが呼び出されます。
+0

あなたの助言に感謝rmaddy。 – thierryb