ios – 如何使用Alamofile的标准结果类型,没有成功的类型?

ios – 如何使用Alamofile的标准结果类型,没有成功的类型?,第1张

概述我正在尝试将Alamofire的Result类型重用于自己的API回调. 这是我正在使用的结果类型的缩短版本: public enum Result<Value> { case Success(Value) case Failure(NSData?, ErrorType)} 所以对于我的API调用,我在完成块中使用它: func getUserContent(userId: S 我正在尝试将Alamofire的Result类型重用于自己的API回调.
这是我正在使用的结果类型的缩短版本:

public enum Result<Value> {    case Success(Value)     case Failure(NSData?,ErrorType)}

所以对于我的API调用,我在完成块中使用它:

func getUserContent(userID: String,completion: (result: Result<User>) -> VoID) {    Alamofire.request(UserRouter.GetUser(userID))            .valIDate()            .responseJsON { (request,response,result) -> VoID in                switch result {                case .Failure(_,let error):                    completion(result: .Failure(nil,error))                case .Success(let value):                    if let responseDict = value as? [String: AnyObject] {                        do {                            // synchronous call which parses response and                             // creates User struct instance or throws exception                            let user = try self.processUserResponse(responseDict)                            completion(result: .Success(user))                        } catch(let error) {                            completion(result: .Failure(nil,error))                        }                    } else {                        completion(result: .Failure(nil,MyAPIError.WrongResponseFormat))                    }                }        }}

我认为它非常适合这里,但有一个问题.我有一些带有完成块的调用,它们应该返回.没有值的成功或失败.
例如. deleteUser方法应该类似于:

func deleteUser(userID: String,completion: (result: Result<nil>) -> VoID) { // ... do some stuff here }

所以当我稍后打电话给我时,我可以这样做:

deleteUser(userID) { (result) -> VoID in            switch result {            case .Success:                print("success")            case .Failure(nil,let error):                print("Error: \(error)")            }        }

但我不能创造“空”.成功.结果<零>当然给了我一个编译错误.但我没有任何类型可以传递给某些.Success案例.有没有人有更好的解决方案,在.Success上定义另一个没有类型的结果类型?

解决方法 @ogreswamp是对的!您可以使用VoID省略类型要求.类型VoID只是一个空元组,实际上是一个零元素的元组,可以写成().这是一个例子:

enum Result<T,E: ErrorType> {    case Success(T)    case Failure(E)    init(value: T) {        self = .Success(value)    }    init(error: E) {        self = .Failure(error)    }}

使用它就像

enum AuthenticationError: ErrorType {    case MissingEmail    case InvalIDPassword}func signUp(email email: String,password: String) -> Result<VoID,AuthenticationError>

你可以返回结果

// Successreturn Result(value: ())// Failurereturn Result(error: .InvalIDPassword)

最后,检查结果

switch result {case .Success(_):    print("Request SignUp was sent")case .Failure(let error):    switch error {    case .InvalIDEmail:        print("InvalID email")    default:        break    }}
总结

以上是内存溢出为你收集整理的ios – 如何使用Alamofile的标准结果类型,没有成功的类型?全部内容,希望文章能够帮你解决ios – 如何使用Alamofile的标准结果类型,没有成功的类型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/web/1048046.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存