Ios AFNetworking将逻辑与视图控制器分离的最佳实践,以及显示数据的职责

Ios AFNetworking将逻辑与视图控制器分离的最佳实践,以及显示数据的职责,ios,afnetworking,afnetworking-2,afnetworking-3,Ios,Afnetworking,Afnetworking 2,Afnetworking 3,我使用AFNetworking作为使用网络的良好库。通常我有一些API类来处理对服务器的所有请求API类是一个单例类,包括一些基本url配置、几个块(闭包)成功和失败,通常将数据传递回请求的控制器(对象)和更新UI/显示新视图控制器等 我的问题是直接在API类中处理警报错误是否可以。例如,如果我们从服务器收到一些错误,我是否需要直接在API类中处理这些错误,或者我需要将它们传递回控制器,并且基于错误类型的回调的控制器将显示所需的警报和硬编码信息。比如“你输入了错误的电子邮件或密码”等等 这也是在

我使用
AFNetworking
作为使用网络的良好库。通常我有一些
API
类来处理对服务器的所有请求
API
类是一个单例类,包括一些基本url配置、几个块(闭包)成功和失败,通常将数据传递回请求的控制器(对象)和更新UI/显示新视图控制器等

我的问题是直接在API类中处理警报错误是否可以。例如,如果我们从服务器收到一些错误,我是否需要直接在API类中处理这些错误,或者我需要将它们传递回控制器,并且基于错误类型的回调的控制器将显示所需的警报和硬编码信息。比如“你输入了错误的电子邮件或密码”等等

这也是在
AFNetworking
的success块或failure块中处理后端错误的最佳实践,例如,当我们
GET/POST/PUT/DELET
某些东西时

据我所知,我们有很多http代码错误,我们可以自动处理,如(状态代码400错误请求等)。但若这是自定义错误,那个么什么状态代码更适合这种情况呢?我想答案是-我们应该使用
失败
回调来处理来自服务器的错误。但是,如果这是一个自定义错误,需要澄清什么

总结

  • 第一个问题是关于基于错误向用户显示警报的实现。我们应该使用哪个类来完成此操作(或者视情况而定)
  • 第二个问题是关于成功/失败块,应该处理哪个自定义错误,或者我们需要在
    AFNeteworking的
    failure块中每次切换
    error
  • 第一个问题是关于向基于用户的用户显示警报的实现 错误。我们应该使用哪个类来完成此操作(或者视情况而定)

    在这一点上,它是相当多的选择应该考虑。但我会分享我的经验。为了解决此类问题,我使用自己的类来显示应用程序中的警报。这是由于警报在一个类中的高度定制

    例如:

    CustomAlertController.alert("Test title", message: "message", acceptMessage: "OK") { () -> () in
    
    }
    
    根据您正在使用的模式,您可以定义应该在何处显示警报。在我的应用程序中,我使用的是MVC。因此,我的ViewController类应该显示基于MVC规则的警报对话框

    范例

     MainViewController -> (Ask for data) NetworkController -> (Response with completion block) -> MainViewController -> (Show alert with response)
    
    第二个问题是关于应该处理的成功/失败块 自定义错误,或者我们需要在故障块中每次切换错误 网络工作

    我喜欢研究上介绍的新框架(Moya),所以我找到了一个可以让我看到易于使用和管理的框架,它提供了处理网络请求的机会。所以,基于它们,就有可能回答你的问题

    莫亚的小例子:

    provider.request(.Zen) { result in
        switch result {
        case let .Success(moyaResponse):
            // do something with the response data or statusCode
        case .Failure(error):
            // this means there was a network failure - either the request
            // wasn't sent (connectivity), or no response was received (server
            // timed out).  If the server responds with a 4xx or 5xx error, that
            // will be sent as a ".Success"-ful response.
        }
    }
    
    由于可以总结出使用switch case来处理请求结果,这是一种非常好的方法,因为代码的可读性很高,而且简单

    第一个问题是关于向基于用户的用户显示警报的实现 错误。我们应该使用哪个类来完成此操作(或者视情况而定)

    在这一点上,它是相当多的选择应该考虑。但我会分享我的经验。为了解决此类问题,我使用自己的类来显示应用程序中的警报。这是由于警报在一个类中的高度定制

    例如:

    CustomAlertController.alert("Test title", message: "message", acceptMessage: "OK") { () -> () in
    
    }
    
    根据您正在使用的模式,您可以定义应该在何处显示警报。在我的应用程序中,我使用的是MVC。因此,我的ViewController类应该显示基于MVC规则的警报对话框

    范例

     MainViewController -> (Ask for data) NetworkController -> (Response with completion block) -> MainViewController -> (Show alert with response)
    
    第二个问题是关于应该处理的成功/失败块 自定义错误,或者我们需要在故障块中每次切换错误 网络工作

    我喜欢研究上介绍的新框架(Moya),所以我找到了一个可以让我看到易于使用和管理的框架,它提供了处理网络请求的机会。所以,基于它们,就有可能回答你的问题

    莫亚的小例子:

    provider.request(.Zen) { result in
        switch result {
        case let .Success(moyaResponse):
            // do something with the response data or statusCode
        case .Failure(error):
            // this means there was a network failure - either the request
            // wasn't sent (connectivity), or no response was received (server
            // timed out).  If the server responds with a 4xx or 5xx error, that
            // will be sent as a ".Success"-ful response.
        }
    }
    
    由于可以总结出使用switch case来处理请求结果,这是一种非常好的方法,因为代码可读性高且简单。

    总结第1点: 在处理所有服务器请求的API类(AFHTTPSessionManager子类)中,添加以下方法代码。 API调用---

    }

    成功电话----

    之后,在baseFailureWithError::class方法中实现通用逻辑,然后回调视图控制器以实现特定于用户的错误验证。 故障呼叫----

    总结第1点: 在处理所有服务器请求的API类(AFHTTPSessionManager子类)中,添加以下方法代码。 API调用---

    }

    成功电话----

    之后,在baseFailureWithError::class方法中实现通用逻辑,然后回调视图控制器以实现特定于用户的错误验证。 故障呼叫----


    谢谢是的,我明白了,但如果我有20个自定义请求,这些请求返回自定义错误和自定义消息,我是否需要用许多if块重载baseFailureWithError?对于常见错误消息,您可以在一个或多个if块中显示它。但您特定于API的自定义错误消息可以通过回调处理。我通过添加API调用使我的回答更具描述性。方法参数可以根据需要进行更改。您是如何处理AFHTTPSessionManager子类的?这些是Singleton吗?如果没有,您是否以某种方式处理该子类的释放?谢谢!是的,我明白了,但如果我有20个自定义请求,这些请求返回自定义错误和自定义消息,我是否需要用许多if块重载baseFailureWithError?对于常见错误消息,您可以在一个或多个if块中显示它。但您特定于API的自定义错误消息可以通过回调进行处理