MVC:在模型或视图中声明的自定义类型?

时间:2015-09-23 15:32:05

标签: ios swift model-view-controller

尝试围绕正确的MVC理论,我在模型或视图中声明自定义类型的位置时有点难过。

我有一个控制面板,其中一组模型参数由我的自定义滑块控制。

// the (simplified) model

class RGParameter {
    var value: Int
    var name: String
    var type: SliderType
}

我制作了一个自定义滑块,根据滑块的类型显示不同的轨道图像。

class RGSlider: UISlider {
    var type: SliderType {
        didSet{
             changeTrackImage()
        }
    }

    func init(frameRect: CGRect, theType: SliderType) {
    }

    func changeTrackImage() {
        var image: UIImage

        switch(type) {
            case .Hue: image = hueImage
            case .Sat: image = satImage
            // etc
        }
        // put image in track
    }

}

在某个地方,我需要这个:

 enum SliderType {
    case Hue
    case Sat
    case Lum
    case Brightness
    case Contrast
}

如果我将SliderType定义放在模型中,滑块UI就不会自行编译,如果我将SliderType定义放在滑块中,模型就不会自行编译。在这一点上,我试图分别处理模型和视图。

我错过了一些基本的东西......

顺便说一句,即使这主要是一个概念性的问题,我也标记了Swift,因为我正在使用它并认为可能有一种优雅的Swift方式。

1 个答案:

答案 0 :(得分:0)

我认为模型和视图都包含的类型没有任何问题,尤其是枚举,它实际上是应用程序词汇表的一部分。他们都知道“整数”,对吧? SliderType只是特定于应用的版本。

但是,如果您这样做,您可能希望从其名称中删除“滑块”一词,并使其更通用,例如VisualParameterType。将它放入自己的头文件中并将其包含在两个位置,以便它们可以在语义上进行通信。