泛型的泛型? A类<t <u>&gt;?

时间:2017-03-11 20:25:17

标签: swift class generics nested-generics

我可以以某种方式强制泛型类型具有泛型类型吗? 我想要一些函数,作为参数类型U,所以我该怎么做?

代码:

class TableViewViewModel<T<U>> {
    typealias SectionDataType = T
    typealias RowDataType = U

    var sections = [SectionDataType<RowDataType>]()
}

2 个答案:

答案 0 :(得分:3)

尝试声明需要关联类型的协议SectionDataType。这意味着任何符合要求的类型(如下面的Section)都必须实现一个类型。然后,在TableViewViewModel中,您可以通过该类型访问您呼叫U的类型。

protocol SectionDataType {
    associatedtype RowDataType
}

struct Section<U>: SectionDataType {
    typealias RowDataType = U
}

class TableViewViewModel<T: SectionDataType> {
    typealias RowDataType = T.RowDataType

    var sections = [T]()
}

答案 1 :(得分:2)

所有你需要做的通用,是声明类型(你用尖括号做什么)。在那之后,它的语法与往常一样。我不确定你想要做什么,所以我只是发一个例子。以下函数声明了三种泛型类型(T,U,Z),将类型U和函数作为参数,函数本身采用类型U的值并返回类型为T的值。所有这些都返回一个类型的值Z.(这是一个非常无用的函数,但是如何以复杂的方式使用泛型的例子):

func myFunc<U,T,Z>(curry : (U) -> T, value : U) -> Z {
    return curry(value) as! Z
}