2011-07-21 29 views
12

Mỗi khi tôi cố gắng chuyển đổi giá trị BOOL thành int. Giá trị INT hiển thị -8 cho True và 0 cho False. Lý tưởng nhất nó nên trả về 1 cho đúng.Cách thích hợp để chuyển đổi giá trị BOOL thành INT?

Tôi đã thử tất cả các cách có thể chuyển đổi như

int val=Info.isattachementDownloadable; 
int val=[[NSString stringWithFormat:@"%d", Info.isattachementDownloadable] intValue]; 
int val=(int)Info.isattachementDownloadable; 

nơi Info.isattachementDownloadable trở BOOL

Trong tất cả các cách hiển thị của nó -8 cho TRUE.

Bất kỳ đề xuất nào?

+0

tôi đã làm đơn giản 'int intVar = boolVar; 'và phải mất giá trị chính xác trong int, tức là 1 trong vòng 1 và 0 0 –

Trả lời

26

Có lẽ đó sẽ giúp (nghĩ tôi không biết tại sao nó có thể cần thiết ở nơi đầu tiên)

NSInteger i = @(YES).integerValue; 

Hy vọng rằng nó sẽ giúp bạn.

+0

Tuyệt vời mà tôi đã tìm kiếm :) ... tôi không biết tại sao tôi bỏ lỡ điều này: ( – Tariq

+0

Tôi sẽ chỉ ra rằng, đối với mã đòi hỏi hiệu quả cao, đây là một phương pháp kém chuyển đổi một BOOL thành int vì nó ** phân bổ ** một đối tượng mỗi khi một chuyển đổi diễn ra –

+4

Tôi đồng ý, rằng nó không phải là nhanh nhất, cũng không phải là phương pháp thân thiện với bộ nhớ, nhưng nó là objc thẳng nhất mà tôi biết. trở lại đồng bằng c với 'int myInt = (someBool? 1: 0);' như bạn đã đề xuất trong câu trả lời của bạn. :) – Ariel

1
BOOL myBool;  
int myInt; 
if (myBool) myInt = 1; 
else myInt = 0; 
+0

này là khá đơn giản ... nhưng bạn không thực hiện bất kì chuyển đổi nào ... liệu nó có thể chuyển đổi được không? – Tariq

21

Nó là nhanh hơn nhiều để làm điều đó như thế này:

BOOL myBool = YES; 
int myInt = (myBool ? 1 : 0); 

myInt sẽ là 1 nếu myBool là CÓ, và 0 nếu myBool là NO.

+0

Hoặc thậm chí tốt hơn, 'myBool! = 0', hoặc bằng sáng chế của JavaScript' !! myBool'. – Blindy

+0

Tôi có thể sai nhưng không BOOL tự động chuyển đổi sang giá trị int này anyways trong Obj-c khi được sử dụng như một int?Ví dụ NSLog (@ "% i", CÓ + CÓ); nhật ký 2 –

2

Bạn luôn có thể sử dụng trình bao bọc hướng đối tượng quanh các số nguyên thủy số (ví dụ: int của C). Tôi có trả lời câu hỏi không? cả hai có và không phụ thuộc vào quan điểm của bạn. Tuy nhiên, đây là những gì tôi thích sử dụng khi sử dụng BOOL như là đầu vào:

NSNumber *numval = [NSNumber numberWithBool:Info.isattachementDownloadable]; 

Và nếu bạn thực sự cần phải sử dụng các kiểu dữ liệu nguyên thủy:

int val = [numval intValue]; 
1

Bạn chỉ có thể gán giá trị BOOL để int từ YES và NO chỉ là các phím tắt cho 1 và 0. Bạn cũng có thể thực hiện các phép toán trên BOOL. FYI, BOOL thậm chí có thể giữ các giá trị từ -128 đến 127 vì chúng chỉ là typedef cho các ký tự đã ký.

BOOL someBool = YES; 
int intFromBool = someBool; 
NSLog(@"%d", intFromBool); 

intFromBool -= YES; 
NSLog(@"%d", intFromBool); 

tham khảo: https://www.bignerdranch.com/blog/bools-sharp-corners/

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