使用“结果”调用完成处理程序功能。 [英] Call completion Handler function using "Result"

查看:45
本文介绍了使用“结果”调用完成处理程序功能。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在使用结果时使用调用getEmployee函数?

How to use call getEmployee function while using "Result"?

struct Employee {
    let name: String
    let designation: String
}

func getEmployee(name: String, completion: @escaping(Result<Employee?, Error>) -> Void) {

}


推荐答案

首先,您需要您的结构符合Codable

First you need to make your structure conform to Codable

struct Employee: Codable {
    let name, designation: String
}

如果您的员工<$成功解码,则您需要从服务器中获取数据并完成通话c $ c> .success(雇员),或者如果失败,则失败并显示错误 .failure(错误)

Than you need to fetch your data from your server and call completion if decoding was successful with your employee .success(employee) or if it fails pass failure with your error .failure(error):

func getEmployee(name: String, completion: @escaping(Result<Employee, Error>) -> Void) {
    URLSession.shared.dataTask(with: URL(string: "http://www.example.com/getEmployee.api?name=\(name)")!) { data, response, error in
        guard let data = data, error == nil else {
            if let error = error { completion(.failure(error)) }
            return
        }
        do {
            let employee = try JSONDecoder().decode(Employee.self, from: data)
            completion(.success(employee))
        } catch {
            completion(.failure(error))
        }
    }
}






用法:


Usage:

getEmployee(name: "Ella") { result in
    switch result {
    case let .success(employee):
        print("employee:", employee)
    case let .failure(error):
        print("error:", error)
    default: break
    }
}

这篇关于使用“结果”调用完成处理程序功能。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆