新建一個返回類型成功or失敗的枚舉
請求成功返回自定義描述[successStr],請求失敗則返回自定義描述[errorStr]api
enum createResult {
case success(successStr:String)
case error(errorStr:String)
}
複製代碼
.success 是createResult的定義的成功回調的類型
.error 是createResult的定義的成功回調的類型異步
//請求成功返回自定義描述[successStr],請求失敗則返回自定義描述[errorStr]
func create(name:String,completionHandler: @escaping(createResult) -> Void ) {
DispatchQueue.global().async {
//模擬Http線程內請求 阻塞3秒
sleep(3)
//模擬返回成功回調
completionHandler(.success(successStr: "請求成功 name = \(name)"))
//模擬返回失敗回調
completionHandler(.error(errorStr: "請求失敗 name = \(name)"))
}
}
複製代碼
外部調用模擬請求的方法並接收成功與失敗的狀況async
//執行create添加方法
create(name: "xinG") { result in
switch result{
case .error(let errorStr):
print("Error:\(errorStr)")
break;
case .success(let successStr):
print("Success:操做成功)")
print("Success:\(successStr)")
break
}
}
複製代碼
這樣的處理能給外部使用的block,經過枚舉的形式,能告訴調用對象內部處理的狀態,語義也十分清晰。spa
enum NetworkError: Error {
case badURL
}
//請求成功返回自定義描述[successStr],請求失敗則返回自定義描述[errorStr]
enum createResult {
case success(successStr:String)
case error(errorStr:String)
}
//請求成功返回自定義描述[successStr],請求失敗則返回自定義描述[errorStr]
func create(name:String,completionHandler: @escaping(createResult) -> Void ) {
DispatchQueue.global().async {
//模擬Http線程內請求 阻塞3秒
sleep(3)
//模擬返回成功回調
completionHandler(.success(successStr: "請求成功 name = \(name)"))
//模擬返回失敗回調
completionHandler(.error(errorStr: "請求失敗 name = \(name)"))
}
}
//外部調用模擬請求的方法並接收成功與失敗的狀況
create(name: "xinG") { result in
switch result{
case .error(let errorStr):
print("Error:\(errorStr)")
break;
case .success(let successStr):
print("Success:操做成功)")
print("Success:\(successStr)")
break
}
}
print("==end")
sleep(1000)
複製代碼