迅速如何为此功能创建完成处理程序

时间:2020-04-03 10:40:40

标签: swift

我是新手,请向我建议如何为此服务功能创建完成处理程序

func postRequest(router: Router, postData: [String: String], completion: @escaping (Result<Int, Error>) -> ()) { ......

我被困在这里

ServiceLayer.postRequest(router: Router.register, postData: postData) { (<#Result<Int, Error>#>) in
            return ....
        }

4 个答案:

答案 0 :(得分:1)

只是要求您给闭包参数起一个名字。您可以这样做:

ServiceLayer.postRequest(router: Router.register, postData: postData) { result in
}

答案 1 :(得分:1)

Result.success.failure的情况,因此您可以像使用->

一样使用Result
postRequest(router: Router.register, postData: postData) { result in
    switch result {
    case .success(let value): 
        // Do something

    case .failure(let error): 
        // Do something
    }
}

奖励

Understanding Result Type in Swift 5

答案 2 :(得分:0)

ServiceLayer.postRequest(router: Router.register, postData: postData) { (response) in
            switch response{
                 case .success(let id):
                     print(id)
                     //do something with return id
                 case .failure(let error):
                    //error handle
            }
        }

更多信息Result type tutorial

答案 3 :(得分:0)

已经有几个正确答案。 如果您有2个具有不同回调的类似发布函数。 F.e

func postRequest(router: Router, postData: [String: String], completion: @escaping (Result<Int, Error>) -> Void) {}
func postRequest(router: Router, postData: [String: String], completion: @escaping (Error) -> Void) {}

然后您可以像这样指定通话类型:

ServiceLayer.postRequest(router: Router.register, postData: postData) { (result: Result<Int, Error>) in
}

ServiceLayer.postRequest(router: Router.register, postData: postData) { (error: Error) in
}