将网络代码移出控制器

时间:2018-01-18 15:21:24

标签: ios swift

我正在学习iOS开发,并且发现,在创建我的视图控制器时,诸如网络之类的东西的代码会导致我的控制器变得庞大。

来自网站开发背景,我一直试图将我的视图相关代码与我的api相关代码分开。

如何实现Swift 4的这种方法?

它是否只是创建一个名为 NetworkService 的类的情况,保留所有与API相关的代码并在需要时引用它?

这种方法有什么好的例子吗?我不想为特定端点创建一个充满URLSessions的类,所以感觉最好的方法是更通用的,我可以将其他值传递给。

另外,例如,我有一个配置文件视图,当我提供该控制器时,该控制器是应该通过服务或控制器网络逻辑请求配置文件数据,还是应该填充某种形式的用户对象并传递那个值进入控制器?

2 个答案:

答案 0 :(得分:3)

只需创建一个自定义类并移动所有网络代码也有一个选项,但您可以在iOS上使用几种不同的体系结构。我绝对建议你看一下this blog entry,特别是看一下使用MVVM或VIPER架构。

答案 1 :(得分:0)

您可以创建一个NetworkService.swift文件,然后扩展您想要添加代码的特定ViewController。

所以例如,假设我有一个ViewController.swift(包含所有与主视图相关的代码),然后我有另一个名为NetworkService.swift的文件

在其中我可以做这样的事情:

extension ViewController {
    func isConnected() {
        //do something
    }
}

然后您将能够从ViewController文件中调用此函数,但不允许扩展保存变量。所有变量必须在ViewController.swift文件中声明

如果您希望能够从Xcode项目中的所有ViewControllers调用方法,那么您应该执行以下操作:

extension UIViewController { //changed ViewController to UIViewController
    func isConnected() {
        //do something
    }
}