Objective-C+Generics+typedef

Monday, February 1, 2016

まだまだ仕事ではObjective-Cを書くことが多いです。
今回はXcode7からObjective-Cにも備わったGenericsと古くからあるtypedefでの組み合わせを書いてみます。



最近は意識して、Xcode7から搭載されたGenericsを用いて、

@property (nonatomic) NSArray <NSString *> *names;

みたいに、Arrayの中身が何なのか明示するように心がけています。
それはそれで良いのですが、例えば以下のようなのをたくさんかかないとってなると面倒です。

- (void)searchWithNames:(NSArray <NSString *> *)names
{
    //...
}

NSArray <NSString *>を毎回書くのはしんどい…

ということで何か楽する方法はないかと考えたら、typedefがあるじゃん!ってなりました。
typedef - wikipedia


Swift でいうtypealiasですね。typedefを使って

typedef NSArray <NSString *> Names

と宣言してあげれば、

@property (nonatomic) Names *names;

//::::::::::::::

- (void)searchWithNames:(Names *)names
{
    //...
}

としてあげられるので記述が楽になりました。
実際には名前の衝突等がありえるのでNamesみたいな名前でそのまま使えないかもなので、prefixにクラス名なりを付けたりは必要ですが。
楽する分代償はついて回るものなので用法用量は守って使っていきたいですね。
いまさらObjective-C??みたいな感じになりそうなのでQiitaには投下せず。笑

techiOSObjective-CTips

Dictionaryにvalueを投げてkey(keys)を取得する

UICollectionViewで綺麗なグリッド表示をする