6

0整数を1BOOLEAN YESに変換したいNO

私のコード:

    NSNumber *num = 0;
    BOOL myBool = [num boolValue];
    NSLog(@"bool is: %@",myBool);

それは次のように出力を与えます(null)

何が間違っている可能性がありますか?

4

6 に答える 6

19

まず第一に、あなたの初期化NSNumberは正しくありません。+numberWith:次で定義されているクラスメソッドの1つを使用する必要がありますNSNumber

+ (NSNumber *)numberWithChar:(char)value;
+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value;
+ (NSNumber *)numberWithShort:(short)value;
+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
+ (NSNumber *)numberWithLong:(long)value;
+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value;
+ (NSNumber *)numberWithLongLong:(long long)value;
+ (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;
+ (NSNumber *)numberWithFloat:(float)value;
+ (NSNumber *)numberWithDouble:(double)value;
+ (NSNumber *)numberWithBool:(BOOL)value;
+ (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0);
+ (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);

BOOLsは単なるsigned charsであるため、フォーマット指定子を使用することはできませんが、、、などの%@任意の統合フォーマット指定子を使用できます。%d%i%c

ただし、YESまたはを出力NOするには、文字列を使用する必要があります。

NSLog(@"bool is: %@", (myBool) ? @"YES" : @"NO");
于 2012-04-26T21:34:05.170 に答える
6

への割り当てが正しくないNSNumber場合、本当に整数を含むオブジェクトを作成するつもりでしたか、それともタイトルの質問「int を BOOL に変換する」は正しいですか?

後者の場合int、値を使用して を変換する01BOOLキャストするだけです。

int num = ...; // num is 0 or 1
BOOL myBool = (BOOL)num; // myBool is NO or YES

ただし、より良い変換は次のとおりです。

BOOL myBool = num != 0; // myBool is NO for 0, YES for anything else

これは、ゼロが偽でゼロ以外が真であるという Obj-C (および C) の概念に従っているためです。

BOOL値を文字列"YES"に変換したい場合"NO"、この単純な関数で効率的に変換できます。

NS_INLINE NSString *BoolToStr(BOOL b) { return b ? @"YES" : @"NO"; }

便利なヘッダーに配置して、必要な場所にインポートするだけです。

于 2012-04-27T00:02:04.553 に答える
2

schが述べたように、あなたはここでそれを台無しにしました:

NSNumber *num = 0;
  • アスタリスクは、オブジェクト (RAM 内のメモリのブロック) へのポインター/参照です。オブジェクトのメモリ ブロックのメモリ アドレス値 (整数/ブール値なし) のみを保持できます。Objective-C でも、BOOL、int、float、double、NSInteger 数値型をオブジェクト (NSNumber) と間違えないでください。
于 2012-04-26T21:44:55.627 に答える
1

これについて完全に正しいかどうかはわかりませんが、NSNumber を '0' として割り当てると、数値が必要な場合は値 'nil' が与えられます。'@0' または '@1' を使用するか、メソッド「numberwithint」

于 2012-10-25T13:42:20.057 に答える
1

@jacob Relkin が指摘しているように。の使い方が間違っていますNSNumber

次に、and ->boolValueを変換できます。作品:NSStringNSNumberBOOLboolValue

最初のスペース文字 (whitespaceSet)、またはオプションの -/+ 記号とそれに続くゼロをスキップします。"Y"、"y"、"T"、"t"、または数字1-9のいずれかに遭遇すると、YES を返します。末尾の文字は無視されます。

あなたはそれを次のintように使うことができますboolean

BOOL a = 数値; //boolValue と同じように動作します。

于 2012-04-27T06:34:23.490 に答える