使用 "结果 "调用完成处理函数

问题描述 投票:0回答:1

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

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

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

}
swift closures
1个回答
1
投票

首先,你需要使你的结构符合Codable

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

比起你需要从服务器上获取数据,如果你的员工解码成功,你需要调用完成。.success(employee) 或者如果它失败了,用你的错误传递失败 .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))
        }
    }
}

用途:

getEmployee(name: "Ella") { result in
    switch result {
    case let .success(employee):
        print("employee:", employee)
    case let .failure(error):
        print("error:", error)
    default: break
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.