xcode7でNullabilityを定義 したヘッダにblocksをtypedef定義したらエラーが出た

typedef (^ SimpleBlock) (id obj);

とかをconfig的な場所で定義して、いろんな場所で使っていた。

たまたまヘッダーファイルをがっつりいじる機会があったので、nonnullとかnullableとかも書いて、ヘッダの上の方で定義していたので存在を忘れていた。

そのままコンパイルしたらワーニングが出ていた。

pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) 

あ、すみません。と思ってnullableと書いてコンパイルしたらエラー。

unknown type name 'nullable' 
expected ')'

こんな感じでいくつか。
結論は最初のワーニングに書いてあって、この通りに書けばよかった。

  1. _Nonnull
  2. _Nullable
  3. _Null_unspecified

つまりこんな。

typedef (^ SimpleBlock) (_Nullable id obj);

それにしても'nullable' なんて知らないとか嘘こけよと。
あと')'も関係ないだろ。。

自分がtypedefで宣言してよく使うのはこんな感じで、都度都度カスタマイズしてまうs。

typedef void (^SimpleBlock)(void);
typedef void (^SimpleObjectBlock)(id obj);
typedef void (^SimpleErrorBlock)(id obj, NSError *error);
typedef void (^SimpleFlagBlock)(BOOL flag);