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