2011-07-21 39 views
12

每當我嘗試將BOOL值轉換爲int時。 INT值顯示爲True,False爲0。理想情況下,它應該返回1爲真。將BOOL值轉換爲INT的正確方法?

我已經嘗試轉換的所有可能的方式像

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

其中Info.isattachementDownloadable回報BOOL

在各方面表現其爲-8 TRUE。

有什麼建議嗎?

+0

我做了簡單的'INT intVar = boolVar;',它需要正確的值INT,即1 1 0 0 –

回答

26

也許這將有助於(想我不知道爲什麼它可能首先需要)

NSInteger i = @(YES).integerValue; 

希望它可以幫助你。

+0

偉大的,我一直在尋找:) ...我不知道爲什麼我錯過了這一個:( – Tariq

+0

我會指出,對於需要高效率的代碼,這是一個糟糕的方法將BOOL轉換爲int,因爲它**每次發生轉換時都會分配**一個對象 –

+4

我同意,它不是最快的,也沒有內存友好的方法,但它是我知道的最直接的對象。無論如何,如果你需要效率 - 你總是可以掉下去回到普通的c,用'int myInt =(someBool?1:0);'如你在回答中所建議的那樣:) – Ariel

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

這是非常簡單的...但你沒有做任何轉換...是不是可以轉換? – Tariq

21

這是更快做到這一點是這樣的:

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

myInt將是1,如果myBool是YES,和0,如果myBool是NO。

+0

甚至更​​好,'myBool!= 0',或JavaScript的'!! myBool'專利。 – Blindy

+0

我可能是錯誤的,但不要BOOL的自動轉換爲這個int值,無論如何在Obj-c當作爲一個int?例如NSLog(@「%i」,YES + YES);日誌2 –

2

總是可以在數字基元周圍使用面向對象的包裝(例如C的int)。那麼我是否回答了這個問題?取決於你的觀點,是和不是。然而,這裏是我更喜歡使用BOOL作爲輸入時使用:

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

如果你真的需要使用原始數據類型:

int val = [numval intValue]; 
1

你可以只分配BOOL值,因爲爲int YES和NO只是1和0的快捷鍵。您還可以在BOOL上執行數學運算。 僅供參考,布爾值甚至可以將值從-128增加到127,因爲它們只是用於帶符號字符的typedef。

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

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

參考:https://www.bignerdranch.com/blog/bools-sharp-corners/