如何正确地为UICollectionView注册做一个类数组?

时间:2018-02-14 17:25:33

标签: xcode swift4

我想要完成的是:

我有一堆课程,为我的家庭控制器定义不同的供稿。当我向左和向右滑动时,它会显示每个班级的每个Feed。

现在,我可以像这样注册每个类(有效):

collectionView?.register(VideoListView.self, forCellWithReuseIdentifier: VideoListView().getCellId())
collectionView?.register(AlertListView.self, forCellWithReuseIdentifier: AlertListView().getCellId())

每个ListView类都继承一个名为FeedView的基类:

class FeedView: BaseCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout

BaseCell只有我的初学者和我不想在每个课程中重复的事情:

class BaseCell: UICollectionViewCell

我想做的是:

let horizontalViews = [VideoListView, AlertListView]

for hv in horizontalViews{
    collectionView?.register(hv.self, forCellWithReuseIdentifier: hv.getCellId())
}

但是,我得到的是这些错误:

  

类型名称后的预期成员名称或构造函数调用

  

实例成员'getCellId'不能用于'FeedView'类型

好的,所以我将数组中的类更改为:

let horizontalViews = [VideoListView(), AlertListView()]

但后来我收到了这个错误:

  

无法使用类型'的参数列表调用'register'(FeedView,   forCellWithReuseIdentifier:String)'

这是在hv.self来电中同时执行hvregister()

我是Swift / Xcode开发的新手,所以任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

我用Swift类(String,Int等等)尝试过它,但我失败了。但是,对于使用NSObject派生的类,其中包含UIViewController,您可以执行此操作。

你想要的是UIViewController。所以你可以这样做:

var classes: [UIViewController.Type] = []

这意味着您可以添加“A类型的UIViewController”类型的任何内容。从中导出所有UIViewController类型。

您想要向此数组添加内容。试试这个:

classes.append(YourFirstViewController.self)
classes.append(YourSecondViewController.self)