Ios 将UIView或结构数组传递给UIViewController

Ios 将UIView或结构数组传递给UIViewController,ios,swift,model-view-controller,Ios,Swift,Model View Controller,为了实现MVC的承诺,我有一个关于是否创建结构的问题。 现在,一组自定义UIView被传递给一个ViewController,后者负责排列它们 例如,自定义UIView如下所示 class TopView: UIView { private var text: String private var question: String private var explanation: String required init(text: string,...)

为了实现MVC的承诺,我有一个关于是否创建结构的问题。 现在,一组自定义UIView被传递给一个ViewController,后者负责排列它们

例如,自定义UIView如下所示

class TopView: UIView {
    private var text: String 
    private var question: String
    private var explanation: String 

    required init(text: string,...) {
        self.text = text    
        ...   
    }
 ....
}
let derivative: [UIView] = [TopView(text: "", ....),
                            MainBodyView(text:"",...), 
                            BottomView(text:"",...)
                            ]
然后,这些UIView将作为数组传递给视图控制器,其中的函数将对它们进行排列。因此,许多UIView数组都是这样存储的

class TopView: UIView {
    private var text: String 
    private var question: String
    private var explanation: String 

    required init(text: string,...) {
        self.text = text    
        ...   
    }
 ....
}
let derivative: [UIView] = [TopView(text: "", ....),
                            MainBodyView(text:"",...), 
                            BottomView(text:"",...)
                            ]
因此,为了有一个清晰且良好的代码结构,我想知道是否最好创建包含所有这些信息的结构,以及ViewController中提取信息并将其放入视图的函数。还是有更好的方法

UIView数组将始终包含TopView、MainBodyView和BottomView。唯一的区别在于MainBodyView的数量。例如,可以有10个或5个主体视图

传递视图非常混乱,完全违反了MVC。听起来您真正想要传递的是自定义配置结构的实例。例如(这是最小值,只需根据需要展开即可):

现在传递数据,让目标视图控制器担心这对于视图来说意味着什么


这是有意义的,因为您(即第一个组装此数据并将其传递给目标视图控制器的视图控制器)并不负责目标视图控制器的视图-您不必知道任何关于它们的信息或以任何方式接触它们。另外,通过这种方式,如果目标视图控制器碰巧使用故事板来实例化实际视图,没有问题,因为您对此不可知(正确地说,这与您无关)。

这不是MVC;您正在传递视图,就像它们是数据一样。但为了给出一个替代方案,我们需要更多关于你真正想做什么的细节。在目标视图控制器中,这些视图是否始终相同?换句话说,我们知道UIView的每个数组都包含TopView、MainBodyView和BottomView吗?如果没有,我们知道什么?谢谢。@matt UIView数组将始终包含TopView、MainBodyView和BottomView。唯一的区别在于MainBodyView的数量。例如,可以有10个或5个主体视图。非常感谢!很乐意帮忙。通常,您应该将视图配置尽可能深入到实际视图中。现实生活中一个非常常见的例子是UITableViewCell人口。在我的例子中,我经常在我的
cellForRowAt
中说类似于
cell.label.text=s
的东西,但我只是在偷懒;在现实生活中,我们应该有一个自定义的单元格子类型,只需将
s
传递给单元格,让单元格负责知道它有一个标签,字符串在这里。