ObjecTips

Swift & Objective-C で iOS とか macOS とか

NSString の真偽値の判定

NSString で表される文字列の真偽値を判定するには boolValue メソッドが使える。

@property (readonly) BOOL boolValue NS_AVAILABLE(10_5, 2_0);

数字、YES/NO、true/false などの文字列を boolValue メソッドで判定できる

    NSLog(@"%d", @"1".boolValue); // 1
    NSLog(@"%d", @"0".boolValue); // 0
    NSLog(@"%d", @"YES".boolValue); // 1
    NSLog(@"%d", @"NO".boolValue); // 0
    NSLog(@"%d", @"true".boolValue); // 1
    NSLog(@"%d", @"false".boolValue); // 0

ドキュメントによれば最初の文字が Y, y, T, t または1~9の数字だとYESを返すとの事。
よって以下は全てYES

    NSLog(@"%d", @"Y".boolValue); // 1
    NSLog(@"%d", @"y".boolValue); // 1
    NSLog(@"%d", @"T".boolValue); // 1
    NSLog(@"%d", @"t".boolValue); // 1
    NSLog(@"%d", @"1".boolValue); // 1
    NSLog(@"%d", @"9".boolValue); // 1

以下のような文字列も最初の1文字で評価されるので全てYES

    NSLog(@"%d", @"Yabc".boolValue); // 1
    NSLog(@"%d", @"yNO".boolValue); // 1
    NSLog(@"%d", @"tfalse".boolValue); // 1

また先頭文字列のスペースは無視される、
文字列が数字の場合、先頭文字列の0の連続は無視される、0の連続の前に置かれる+-の記号は無視されるという仕様があるので以下のケースも全てYESになる。

    // スペース無視
    NSLog(@"%d", @"  y".boolValue); // 1
    // 先頭の0の連続は無視
    NSLog(@"%d", @"001".boolValue); // 1
    // 数字の前の+と-は無視
    NSLog(@"%d", @"+1".boolValue); // 1
    NSLog(@"%d", @"-1".boolValue); // 1
    // 数字の前の+と-と0の連続は無視
    NSLog(@"%d", @"+01".boolValue); // 1
    NSLog(@"%d", @"-001".boolValue); // 1

以下のケースは全てNOになる。

    // 先頭文字列がスペースではない
    NSLog(@"%d", @"- 1".boolValue); // 0
    NSLog(@"%d", @"- t".boolValue); // 0
    // 文字列が数字ではないので0の連続は無視されない
    NSLog(@"%d", @"00y".boolValue); // 0
    NSLog(@"%d", @"00t".boolValue); // 0
    // 数字の文字列の前の+と-の記号を無視するのは1つまで
    NSLog(@"%d", @"++001".boolValue); // 0
    NSLog(@"%d", @"++1".boolValue); // 0