函数回调/最佳实践

时间:2016-11-18 21:45:31

标签: swift swift3

我正在编写一个API,用于从网络加载时间间隔(startDate,endDate)的数据并返回图像。

如果我的函数(loadData)在没有执行成功或失败回调的情况下返回?

在我的情况下,如果我已经在这个时间间隔内加载数据,那么loadData就会返回。

我认为这不是一个好方法。 在这种情况下,我也要求自己泄漏。

编辑:这是我的代码:

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 个答案:

答案 0 :(得分:0)

由于“已经启动的操作”而返回的是呼叫者需要知道的信息。简单地返回任何内容并且不调用任何回调是一个糟糕的设计。来电者不知道为什么会这样。

您有三个选择(选择一个):

  1. 调用成功回调,因为确实没有失败。
  2. 使用“错误”调用失败回调,表示失败是由于“已启动”状态造成的。
  3. 更改loadImageFromWebService...方法的签名以返回布尔值。返回false表示由于操作已在进行中而无法继续。否则返回true。这意味着如果您返回false,则不会调用两个回调。如果你返回true,那么最终将调用两个回调中的一个。