สตริงการจัดรูปแบบ Objective-C สำหรับบูลีน?


คำตอบ:


173

วิธีหนึ่งที่ทำได้คือการแปลงเป็นสตริง (เนื่องจากมีเพียงสองความเป็นไปได้จึงไม่ยาก):

NSLog(@" %s", BOOL_VAL ? "true" : "false");

ฉันไม่คิดว่าจะมีตัวระบุรูปแบบสำหรับค่าบูลีน


2
สตริงเอาต์พุตไม่ควรเป็น: "ใช่" และ "ไม่ใช่": P
Ben S

131
หรือ "เค้ก" และ "ไม่มีเค้ก" สิ่งที่เหมาะกับคุณ
Michael Myers

2
ฉันชอบเค้กและไม่มีเค้ก! ฉันจะแทนที่รหัส x ทั้งหมดของฉัน? @ "YES": @ "NO" ด้วย x? @ "Cake": @ "No Cake" ทันที: D - อย่างน้อยก็สำหรับคำอธิบายวัตถุของฉันอยู่ดี;)
Jason Coco

8
หรือ TheCakeIsALie และ TheCakeIsNotALie
Warren P

3
% hhd เป็นวิธีที่เหมาะสมในการแสดงค่าบูลีนเป็นค่าสถานะจำนวนเต็มเป็น 0 หรือ 1 0 เป็นเท็จ 1 เป็นจริง
OZCAN

69

ฉันจะแนะนำ

NSLog(@"%@", boolValue ? @"YES" : @"NO");

เพราะอืมBOOLเรียกว่าYESหรือNOใน Objective-C


2
ดูเหมือนว่าเป็นจุดยูทิลิตี้ที่ชัดเจนสำหรับมาโครหรือฟังก์ชัน (หากเพียงเพื่อหลีกเลี่ยงการแพร่กระจายของตัวอักษรสตริงทั่วทั้งแอป)
Warren P

มีเพียงคุณเท่านั้นที่ไม่จำเป็นต้องหลีกเลี่ยง "การแพร่กระจาย" ของสตริงดังกล่าวเนื่องจาก ObjC รวบรวมอินสแตนซ์ที่มีมูลค่าเดียวกันของสตริงที่ไม่เปลี่ยนรูป (และวัตถุอื่น ๆ ) ซึ่งจะมีเพียงสำเนาเดียวเท่านั้นที่อยู่ในหน่วยความจำ มาโครก็โอเคฟังก์ชันก็โอเคและการคัดลอกแล้ววางก็ใช้ได้เช่นกัน
Motti Shneor


23

ใน Objective-C BOOLประเภทเป็นเพียงอักขระที่ลงนาม จาก<objc/objc.h>:

typedef signed char BOOL;
#define YES         (BOOL)1
#define NO          (BOOL)0

คุณจึงสามารถพิมพ์ได้โดยใช้%dฟอร์แมตเตอร์ แต่จะพิมพ์เฉพาะ a 1หรือ a 0ไม่ใช่YESหรือNOหรือ

หรือคุณสามารถใช้สตริงตามที่แนะนำในคำตอบอื่น ๆ


1
% c จะไม่พยายามพิมพ์อักขระ ASCII 0 หรือ 1 ซึ่งทั้งสองเป็นอักขระควบคุมหรือไม่?
JeremyP

21

เพิ่มฟังก์ชันอินไลน์นี้ใน.hไฟล์ของคุณ:

static inline NSString* NSStringFromBOOL(BOOL aBool) {
    return aBool? @"YES" : @"NO";
}

ตอนนี้คุณพร้อมที่จะไป ...

NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));


1

เพียงเพิ่มฟังก์ชันด้านล่างและส่งผ่านBOOLค่าและวิธีการจะส่งกลับNSString

- (NSString *)boolValueToString:(BOOL)theBool {
    if (theBool == 0)
        return @"NO"; // can change to No, NOOOOO, etc
    else
        return @"YES"; // can change to YEAH, Yes, YESSSSS etc
}

1

ฉันเชื่อว่าวิธีที่ง่ายที่สุดคือ:

NSLog(@" %@", @(BOOL_VAL));

@ (expression)

ประเมินนิพจน์แบบบรรจุกล่องแบบไดนามิกและส่งคืนอ็อบเจ็กต์ลิเทอรัลที่เหมาะสมตามค่าของมัน (เช่น NSString สำหรับ const char *, NSNumber สำหรับ int เป็นต้น)


0

ฉันสร้างหมวดหมู่ของ NSString ด้วยสิ่งนี้

+ (instancetype)stringWithBool:(BOOL)boolValue {
return boolValue ? @"YES" : @"NO";
}

และใช้มันดังนี้:

[NSString stringWithBool:boolValue];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.