2016-12-09 16 views
0

NSOutlineViewに項目としてSwift構造体を設定しようとしています。これは、row(forItem:)メソッドを除き、常に-1を返します。 私は構造体がEquatableに適合し、isEqual関数を実装していることを確認しました。まだNSOutlineViewはどの項目の行も見つけられません。NSOutlineViewでSwift構造体を使用

構造体をクラスに変換すると(ではなく、NSObjectから派生した)、すべて動作します。 Equatableに準拠していなくても、isEqualの機能を実装しなくても。

私は、Swiftのクラスと構造体は、参照型と値型の2つ以外は基本的に同じだと考えました。

Swift構造体をNSOutlineViewのアイテムとして使用するためには、どのような実装が必要ですか?

答えて

0

誰かがApple Developer Forumにa similar questionと投稿しました。

NSOutlineViewは、アイテムを識別するときにEquatableを使用しません。アイテムへの参照ポインタを使用します。 Swiftでは、構造体は常に値によって渡され(参照渡しされません)、アウトラインビューは渡すアイテムが同じであることを認識しません。 Swiftはクラスの参照渡しを使用するため、構造体をクラスに切り替えると問題が解決されます。

残念ながら、NSOutlineViewを使用するためのアイテムとしてStructsを使用する方法はなく、クラスを使用する必要があります。

this answerを参照してください。スウィフトの使用方法は、参照渡しと値渡しのどちらの方法を使用しますか。

-1

サブクラス内のメソッドrow(forItem item: Any?)をオーバーライドするには、すべての行を検索し、等価なインデックスを戻すだけです。

関連する問題