2011-07-19 35 views
15

Tôi muốn làm một việc như sau:Có một trình định dạng định dạng hoạt động với các giá trị Boolean không?

NSLog(@"You got: %x", booleanValue); 

trong đó x là người chỉ định. Nhưng tôi không thể tìm được! Tôi muốn tránh:

if (booleanValue) { 
    NSLog(@"You got: YES"); 
} 
else { 
    NSLog(@"You got: NO"); 
} 

Bất kỳ ý tưởng nào? Tài liệu không có trình chỉ định Boolean. %@ cũng không hoạt động.

+1

Điều thú vị là% x sẽ hoạt động. (specifier thập lục phân trường hợp thấp hơn) – Joe

+0

'% @' là trình định dạng định dạng cho một đối tượng Objective-C. BOOL, Boolean, bool, vv không phải là loại đối tượng. – Caleb

Trả lời

31

Dưới đây là hai điều mà làm việc:

NSLog(@"You got: %@",booleanValue ? @"YES" : @"NO"); 

hoặc bạn có thể cast:

NSLog(@"You got: %d", (int)booleanValue); 

nào sẽ ra 0 hoặc 1

+0

Cảm ơn, tôi quên mất? : công tắc điện! –

+2

Bạn không cần dàn diễn viên. 'NSLog()' là variadic, 'char char' (mà' BOOL' là) sẽ được ngầm ẩn thành 'int'. –

7

Bạn có thể bỏ nó vào một int và sử dụng %d:

NSLog(@"You got: %d", (int)booleanValue); 

Hoặc sử dụng một cái gì đó như thế này:

NSLog(@"You got: %@", booleanValue ? @"YES" : @"NO"); 
+0

Dàn diễn viên là không cần thiết, xem nhận xét của tôi về câu trả lời của PengOne. –

3

Không có format specifier mà tôi biết. Bạn có thể thực hiện việc này:

NSLog(@"You got: %@", (booleanValue ? @"YES" : @"NO")); 

Cách khác, bạn có thể viết một hàm hoặc macro nhỏ bằng cách sử dụng logic ở trên có BOOL và trả về chuỗi thích hợp. Sau đó, bạn có thể sử dụng chức năng đó trong các câu lệnh tường trình của mình.

0

Đây là mã:

NSLog(@"%hhd",BOOLvariable); 

In 1 cho Có và 0 cho Không. Làm việc cho tôi.

+0

Ném một cảnh báo như của iOS10 (có thể sớm hơn) '% i', tuy nhiên, không còn ném cảnh báo ngay cả khi không rõ ràng (int) đúc. –

-1

Đối với giá trị BOOL, bạn có thể sử dụng trình định dạng định dạng %hhd. Ví dụ:

NSLog(@"You got: %hhd", booleanValue); 
+1

Điều này giống như câu trả lời của @ViruMax. – UditS

Các vấn đề liên quan