Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实用程序类的正确实现[Swift]_Swift_Xcode6 - Fatal编程技术网

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

实用程序类的正确实现[Swift],swift,xcode6,Swift,Xcode6,我正在清理我的代码,因为我的TableViewController类已经很满很长了。为了清理代码,我想创建一些实用程序类,为TableViewController提供方法。在我当前的实现中,这些方法/函数能够更改主TableViewController中的变量。以下是我当前设置的一个示例: class FooImplementation: NSObject { var viewController: Foo init(viewController: TableViewContr

我正在清理我的代码,因为我的
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
类,该类可以访问
foooutility1
foooutility2
提供的所有方法吗


谢谢

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

  • 它们可以更改视图控制器的内部状态
  • 如果成员属性本质上是私有的,则必须将其“升级”为内部属性或公共属性
当然,我不知道您希望将哪种行为从视图控制器移动到实用程序类-我的建议是使用以下一种或多种:

  • 创建视图控制器扩展
  • 创建您自己的一组基本视图控制器,这些控制器继承自
    UIViewController
    ,用作最终视图控制器的超类
  • 将一些逻辑移到外部类,但使用委托模式进行交互
第二种情况是我经常使用的,第三种情况是我在最新项目中应用的,通过为要显示的每个视图实现更好的关注点分离:

  • 视图控制器,负责管理(但不显示)视图,并处理从其视图接收的事件
  • 数据源,负责提供要在视图中显示的数据,以及添加/删除/更新(如果需要)的方法
  • (层次结构)视图,在其自己的xib文件中的单独类中实现
它使开发变得有点复杂,但最终我有了一个light view控制器,以及一个负责显示数据、处理事件并将其转发给view控制器的视图


请注意,这不是解决方案,而是一个可能的解决方案。有几个变量需要考虑,以确定要从视图控制器中移动什么,我认为还有个人偏好。

例如,实用程序类提供了一个方法列表,可以帮助创建和设置单元格中的文本。另一个实现了视图控制器的数据检索,并相应地更新了表视图等。根据上面的评论,您对这些有什么具体的建议?感谢againcells:我通常将数据传递到单元格并让它呈现-我在CellForRowatineXpath中这样做。这使得单元可重用数据检索:我从不在视图控制器中实现这一点,相反,我有几个
UserManager
PostManager
,等等。负责检索数据-分离关注点是关键