正确实现实用程序类[Swift]

mat*_*son 3 swift xcode6

我正在清理我的代码,因为我的TableViewController课程变得相当充实和漫长.为了清理代码,我想创建一些为它们提供方法的实用程序类TableViewController.在我当前的实现中,这些方法/函数能够在main中更改变量TableViewController.以下是我当前设置的示例:

class FooImplementation: NSObject {
    var viewController: Foo

    init(viewController: TableViewController) {
        self.viewController = viewController
    }
}

class FooUtility1: FooImplementation {
    // Methods
}

class FooUtility2: FooImplementation {
    // Methods
}

class Foo: TableViewController {
    var fooUtility1: FooUtility1
    var fooUtility2: FooUtility2

    override viewDidLoad() {
        fooUtlity1 = FooUtility1(self)
        fooUtlity2 = FooUtility2(self)
    }

    // Use of the methods...
}
Run Code Online (Sandbox Code Playgroud)

是否有更好/普遍定义的创建和使用这些类的方法?这些类可以组合成一个Utility可以访问所有方法FooUtility1并FooUtility2提供的类吗?

谢谢!

Ant*_*nio 6

我不认为添加实用程序类是一个好的设计模式,至少有以下原因:

  • 他们可以更改视图控制器的内部状态
  • 当它们本质上属于私有时,你必须将成员属性"升级"为内部或公共

当然我不知道你想从视图控制器移动到实用程序类的行为是什么 - 我的建议是使用以下一个或多个:

  • 创建视图控制器扩展
  • 创建自己的一组基本视图控制器,继承自UIViewController,用作最终视图控制器的超类
  • 将一些逻辑移到外部类,但使用委托模式进行交互

第二种情况是我经常使用的,第3种是我应用于我的最新项目的情况,通过实现每个要显示的视图更好地分离关注点:

  • 视图控制器,负责管理(但不显示)视图,并处理从其视图接收的事件
  • 数据源,负责提供要在视图中显示的数据,以及根据需要添加/删除/更新的方法
  • (层次结构)视图,在其自己的xib文件中的单独类中实现.

它使开发变得更复杂,但最后我有一个光视图控制器,以及一个负责显示数据,处理事件并将它们转发到视图控制器的视图.

请注意,这不是解决方案,只是一种可能的解决方案.有几个变量需要考虑,确保你想从视图控制器移动什么,我想也是个人偏好.