1.定义异步返回类型
新建一个返回类型成功or失败的枚举
请求成功返回自定义描述[successStr],请求失败则返回自定义描述[errorStr]
enum createResult {
case success(successStr:String)
case error(errorStr:String)
}
2.请求方法
.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)"))
}
}
3.外部调用方法
外部调用模拟请求的方法并接收成功与失败的情况
//执行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,通过枚举的形式,能告诉调用对象内部处理的状态,语义也十分清晰。
完整的代码片段
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)