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

时间:2014-10-20 17:46:28

标签: swift xcode6

我正在清理我的代码,因为我的TableViewController课程变得相当充实和漫长。为了清理代码,我想创建一些为TableViewController提供方法的实用程序类。在我当前的实现中,这些方法/函数能够更改主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...
}

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

谢谢!

1 个答案:

答案 0 :(得分:6)

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

  • 他们可以更改视图控制器的内部状态
  • 当成员属性属于私有状态时,您必须将其“升级”为内部或公共

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

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

第二个案例是我经常使用的案例,第三个案例是我应用于我的最新项目的案例,通过实施每个要显示的视图更好地分离关注点:

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

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

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