CompositeパターンGoその8の続きmpon/xgodeprojPBXGroupXcodeは実際のファイル構造じゃなくて好きな構造で表示できる。実際のファイルは全部一つのフォルダに入ってたとしても、階層構造の表示できる。それを表現してるsectionがPBXGroup。PBXGroupはchildrenを持ってて、そこにはPBXGroupかPBXFileReferenceを持ってるって訳。ん、確かこのパターンどこかで見たことあるぞ・・あっ!これ進研ゼミで習ったやつだ!!ってことで、Compositeパターンを思い出したのでやってみた。Compositeパターンディレクトリ構造とか再帰的に辿る的なやつのときに使うやつ。TECHSCORE(テックスコア)今回は、GroupっていうtypeとFileReferenceっていうtypeを同一視するために、interfaceを宣言する。interface名悩むなぁ。Inspectorっていうペインで見れる。FileInspectorっていう名前か、Fileか、それか参考サイトみたいにDirectoryEntryにするか、うーむ。よし、GruopEntryにしよう。GroupEntryはグループかどうかを教えてくれるIsGroup()と、その子供達を返すChildren()、そのEntryの情報を返してくれるDescription()あたりがあればよさそう。string}Goの場合、interfaceを定義したらあとは同一視したいtype、今回でいうと、GroupとFileReferenceでこのメソッドを実装してあげれば2つとも全然違うtypeなのに、GroupEntityとして処理できる。実装の仕方は例えばIsGroupのやつはこんな感じ。レシーパーとしてそのstructを指定する。紹介されてる記事だとよくポインタついてたりして、その辺ちゃんと理解しないといけなそう。filepath.Walkと同じことやればいいやと思って実装パクることにした。いやー、OSSってすばらしい。普段、iOS書いてるからすごく素晴らしく感じる。filepath.Walkの処理はここに書いてある。GitHub今回のやつの場合、丁寧にerror返すみたいなところまでやってないからその辺削ってこんな感じで実装した。表示するときに階層構造表したいから、levelも渡すようにした。}}で、コマンドで利用する側は、こんな感じで好き勝手できる。}})結果は、こんな感じ。SampleTests.xctestということである程度完成した。ここまでの感想ポインタがよくわかんなくなってきた。つけてもつけなくても動いてるっぽいのなぜ標準パッケージのソース見てたら意外と長い名前つけてる。forの変数は1文字にしないとと思ってたけどそんなことなさそう調べ物してるときにforの中でselect使ってる構文があったけどなんだろうか、あれは。ツイートはてなブログをはじめよう!masato47744さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。