Swift 自定義異步回調 block

1.定義異步返回類型

新建一個返回類型成功or失敗的枚舉
請求成功返回自定義描述[successStr],請求失敗則返回自定義描述[errorStr]api

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.外部調用方法

外部調用模擬請求的方法並接收成功與失敗的狀況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)
複製代碼
相關文章
相關標籤/搜索