2017-05-29 5 views
2

に再帰的なジェネリック型を宣言することはできません。その理由は、commandSetTをこの基本タイプのサブクラスにする必要があるからです。は、私が以前にC#での再帰的なジェネリッククラスを宣言したスウィフト

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

} 

しかし、コンパイラはスーパークラス制約が再帰的であると不平を言っています。

私はcommandSetTはこのクラスのサブクラスであることを確認したいので、まあ、はい、それはです。

別に「うまくスウィフトは、C#ではありません」のような明白なコメントから、私は本当にこの要件を強制する方法任意のアイデアを持っている人から話を聞くしたいと思います。

+0

私はあなたのデータモデルを再考すべきだと思う); tは、なぜ知っています。どのような問題を解決しようとしていますか?ジェネリックパラメータの型を定義できるようにする - それはロードマップ[スウィフトジェネリック宣言](https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md) –

+0

に見えます基本クラスから派生しなければならないようにします。 –

+0

@CodeDifferentにあるよう –

答えて

0

私は同じ問題を抱えていたし、私は自分自身のためにいくつかの解像度を見つけた - だけでなく、あなたを助けるかもしれない:

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 
} 

が、それはない作品を行い、あなたが

var aVar: AType? { get } 

宣言を削除した場合、私は「ドン

関連する問題