Node
クラスはSwiftでCollection
を実装しており、各Node
は同じタイプの子ノードのコレクションとして再帰的に動作します。Swift 3 Collectionサブクラスはコンパイルされません
問題は、私はNode
をサブクラス化するとき、私はまだサブクラスはNode
のコレクションとして機能するようにしたいが、私はそれを訴えて、サブクラスDerivedNode
のインスタンスを反復処理しようとすると、スウィフトもコンパイルされませんです。
IndexingIterator<Node>
はIndexingIterator<DerivedNode>
に変換できません。
なぜこれをやろうとしているのですか?私はDerivedNode
を繰り返し処理しても構いませんが、それらはNode
として繰り返し処理されます。
興味深いことに、ヘルプのポップアップに正しいタイプが表示されるため、コンパイラ/エディタではタイプがNode
であることがわかります。しかし、それは何らかの理由でコンパイルに失敗します。あなたはイテレータを宣言しない場合は、コレクションはあなたに1つを与える
extension Node: Collection {
public typealias Index = Int
public var startIndex: Int {
return 0
}
public var endIndex: Int {
return attributes.count
}
public func index(after i: Int) -> Int {
return i + 1
}
public subscript(i: Int) -> Node {
return attributes[i].value
}
}
あなたは 'コレクション'に準拠した方法を示すことができますか? 'Element'として' Node'を使っていますか? –
私は明示的にどこでも 'Element'を宣言していません。私はそれをしなければなりませんか? – devios1
この方法で動作するノードを再作成することはできません。 '属性'とは何ですか? '[Node]'と思われますが、 'value'も' Node'ですか? –