Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 仿制药的仿制药?A类<;T<;U>>;?_Swift_Class_Generics_Nested Generics - Fatal编程技术网

Swift 仿制药的仿制药?A类<;T<;U>>;?

Swift 仿制药的仿制药?A类<;T<;U>>;?,swift,class,generics,nested-generics,Swift,Class,Generics,Nested Generics,我可以强制泛型类型具有泛型类型吗? 我想有一些函数,作为参数类型U,我该怎么做呢 代码: class TableViewModel{ typealias SectionDataType=T typealias RowDataType=U var sections=[SectionDataType]() } 尝试声明需要关联类型的协议SectionDataType。这意味着任何一致类型(如下面的部分)都必须实现typealias。然后,在tableviewmodel中,您可以通过该类型别名访问正在

我可以强制泛型类型具有泛型类型吗? 我想有一些函数,作为参数类型U,我该怎么做呢

代码:

class TableViewModel{
typealias SectionDataType=T
typealias RowDataType=U
var sections=[SectionDataType]()
}

尝试声明需要关联类型的协议
SectionDataType
。这意味着任何一致类型(如下面的
部分
)都必须实现typealias。然后,在
tableviewmodel
中,您可以通过该类型别名访问正在调用的类型
U

protocol SectionDataType {
    associatedtype RowDataType
}

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

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

    var sections = [T]()
}
协议部分数据类型{
associatedtype行数据类型
}
结构节:节数据类型{
typealias RowDataType=U
}
类TableViewModel{
typealias RowDataType=T.RowDataType
变量节=[T]()
}

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

func myFunc(咖喱:(U)->T,值:U)->Z{
将咖喱(值)返回为!Z
}

我也在考虑这个问题,但这很难看,而且容易出错。例如,
混凝土视图模型
。真难看。我不是在说,我允许
ConcreteViewModel
其中
T和U
不一样,这不是我想要的,使用某个未知类型和一个未知的通用占位符(
T
)能起到什么作用?我有点怀疑你是否有一些逻辑是通用的,只适用于具有单个泛型占位符的类型。几乎可以肯定的是,您正在寻找一个协议(但没有看到您试图实现的具体示例,很难确定)。例如:
class TableViewModel其中T:SectionDataType其中U:RowDataType
另一个示例:
class TableViewModel其中T:SectionDataType
Oops!我用C#回答!真的很顺利。非常感谢。
protocol SectionDataType {
    associatedtype RowDataType
}

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

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

    var sections = [T]()
}
func myFunc<U,T,Z>(curry : (U) -> T, value : U) -> Z {
    return curry(value) as! Z
}