Objective-Cによって提供されるint
やfloat
などの基本的なデータ型をプリミティブ型と呼びます。
真偽を表す型としてObjective-CにはBOOL型とBoolean型が用意されています。稀に同一ソースコード内で入り乱れて使われていることがあります。ひどく違和感を覚えたので、どのヘッダーファイルでどのように定義されているか調べてみました。
BOOL型
objc.h
にて定義されています。
typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used. #define OBJC_BOOL_DEFINED #define YES (BOOL)1 #define NO (BOOL)0
Boolean型
CFBase.h
にて定義されています。型の定義は以下のようになっています。
typedef unsigned char Boolean;
TRUE
やFALSE
は少し離れたところに以下のように定義されています。
#if !defined(TRUE) #define TRUE 1 #endif #if !defined(FALSE) #define FALSE 0 #endif
まとめ
型と値を見ている限りは動作に問題なさそうですが、正しい組み合わせで使いたいですね。