我正在使用集合视图,我正在尝试创建一个元组数组,其中包含重用标识符,单元格类型以及要在tableView(_:cellForItemAt:)
中设置单元格的函数。
到目前为止这么好,除了功能。 Xcode在数组声明中抱怨它
“无法将类型的值'(AddASpotInfoVC) - >(UICollectionViewCell) - > UICollectionViewCell'转换为预期的元素类型'(UICollectionViewCell) - > UICollectionViewCell'
AddASpotInfoVC
是视图控制器的类。这是数组的初始化本身:
typealias cellFunc = (_ aCell: UICollectionViewCell) -> UICollectionViewCell
let reuseIdentifiers: [(String, UICollectionViewCell.Type, cellFunc)] = [
("AddASpotInfoPicCell", AddASpotInfoPicCell.self, picCellFunc),
("AddASpotInfoNameCell", AddASpotInfoNameCell.self, nameCellFunc),
("AddASpotInfoDescCell", AddASpotInfoDescCell.self, descCellFunc),
("AddASpotInfoTagsCell", AddASpotInfoTagsCell.self, tagCellFunc)]
数组中的所有函数(现在)都在视图控制器类的扩展中(不是它应该是相关的,我认为......)并且看起来像这样
func picCellFunc(aCell: UICollectionViewCell) -> UICollectionViewCell {
return aCell
}
那么,我在数组的初始化中做错了什么?
答案 0 :(得分:0)
函数实现可以依赖于其他变量。因此,它要求您将函数声明为静态。使用:
(\bME\b|\bTR\b|[0-9]{2})[0-9]{7}
在数组中使用:
static func picCellFunc (aCell: UICollectionViewCell) -> UICollectionViewCell
编辑:您还可以将阵列初始化代码移动到您的某个功能或初始化程序中。
答案 1 :(得分:0)
如果你的函数没有使用任何状态,那么让它们像Adamsor建议的类或静态方法一样是有意义的。
但是如果你确实希望你的方法在viewController实例中读/写任何变量,你可以使用lazy var作为元组数组,并使用self引用方法,如下所示:
lazy var reuseIdentifiers: [(String, UICollectionViewCell.Type, cellFunc)] = [
("AddASpotInfoPicCell", AddASpotInfoPicCell.self, self.picCellFunc),
("AddASpotInfoNameCell", AddASpotInfoNameCell.self, self.nameCellFunc),
("AddASpotInfoDescCell", AddASpotInfoDescCell.self, self.descCellFunc),
("AddASpotInfoTagsCell", AddASpotInfoTagsCell.self, self.tagCellFunc)]