我正在编写一个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)
}
你有什么建议吗?
由于
答案 0 :(得分:0)
由于“已经启动的操作”而返回的是呼叫者需要知道的信息。简单地返回任何内容并且不调用任何回调是一个糟糕的设计。来电者不知道为什么会这样。
您有三个选择(选择一个):
loadImageFromWebService...
方法的签名以返回布尔值。返回false
表示由于操作已在进行中而无法继续。否则返回true
。这意味着如果您返回false
,则不会调用两个回调。如果你返回true
,那么最终将调用两个回调中的一个。