泛型的泛型? class一个<T<U>>?
Generic of Generics ? class A<T<U>>?
我能否以某种方式强制泛型类型具有泛型类型?
我想要一些函数,其参数类型为 U,那么我该怎么做呢?
代码:
class TableViewViewModel<T<U>> {
typealias SectionDataType = T
typealias RowDataType = U
var sections = [SectionDataType<RowDataType>]()
}
尝试声明一个需要关联类型的协议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]()
}
对于泛型,你所要做的就是声明类型(你在用尖括号做什么)。在那之后,它是照常的语法。我不确定你到底想做什么,所以我只是 post 举个例子。下面的函数声明了三个泛型类型(T、U、Z),接受一个类型U和一个函数作为参数,函数本身接受一个类型U的值和returns一个类型T的值。所有这些returns 类型 Z 的值。(这是一个非常无用的 func,但是一个如何以复杂方式使用泛型的示例):
func myFunc<U,T,Z>(curry : (U) -> T, value : U) -> Z {
return curry(value) as! Z
}
我能否以某种方式强制泛型类型具有泛型类型? 我想要一些函数,其参数类型为 U,那么我该怎么做呢?
代码:
class TableViewViewModel<T<U>> {
typealias SectionDataType = T
typealias RowDataType = U
var sections = [SectionDataType<RowDataType>]()
}
尝试声明一个需要关联类型的协议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]()
}
对于泛型,你所要做的就是声明类型(你在用尖括号做什么)。在那之后,它是照常的语法。我不确定你到底想做什么,所以我只是 post 举个例子。下面的函数声明了三个泛型类型(T、U、Z),接受一个类型U和一个函数作为参数,函数本身接受一个类型U的值和returns一个类型T的值。所有这些returns 类型 Z 的值。(这是一个非常无用的 func,但是一个如何以复杂方式使用泛型的示例):
func myFunc<U,T,Z>(curry : (U) -> T, value : U) -> Z {
return curry(value) as! Z
}