无法在Swift中声明递归泛型类型

时间:2017-05-29 17:12:39

标签: swift generics recursion

我之前在C#中声明了一个递归泛型类:

  public class CommandSet<commandSetT, commandT> : ICommandSet
               where commandSetT : CommandSet<commandSetT, commandT>
               where commandT : Command
  {

  }

现在,我想在Swift中做同样的事情。原因是我希望commandSetT必须是这个基类型的子类。

public class CommandSet<commandSetT, commandT : Command> : CommandSetProtocol
             where commandSetT : CommandSet<commandSetT, commandT>,
             commandT : Command
{

}

但是,编译器抱怨超类约束是递归的。

嗯,是的,因为我想确保commandSetT是这个类的子类。

除了明显的评论,例如&#34;好的Swift不是C#&#34;,我真的希望听到任何有任何想法如何强制执行此要求的人。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我为自己找到了一些解决方案 - 也可以帮助你:

CLEARCASE_BRTYPE

但如果删除

则不起作用
protocol A : class {
    associatedtype AType

    var aVar: AType? { get }
}

protocol B : A {
    associatedtype BType : A
}

class Test<AType> : B {
    typealias BType = Test<AType>

    var aVar: AType?
}

class Overriding : Test<String> {
    typealias BType = Overriding
}
声明,我不知道为什么;)