一個看似簡單的問題`優點:我可以有某種數量的對象,可以是零,但是我可以指定像原始INT:如何結合int`和`NSInteger`
這樣:
NSNumber *n = nil;
n = 3;
if(n == nil){
// some actions...
} else if (n == 1){
// some actions...
} else {
// some actions...
}
感謝您的輸入
一個看似簡單的問題`優點:我可以有某種數量的對象,可以是零,但是我可以指定像原始INT:如何結合int`和`NSInteger`
這樣:
NSNumber *n = nil;
n = 3;
if(n == nil){
// some actions...
} else if (n == 1){
// some actions...
} else {
// some actions...
}
感謝您的輸入
答案是NO。如果變量是一個對象您可以分配另一目的,
n = anotherNSNumber;
,或者通過使用性質或通過方法,
n = [NSNumber numberWithInt:3];
設置的值,並且比較與另一對象對象,
if (n == anotherNSNumber) // Checks the reference
或通過使用比較其性能/方法,
if (([n intValue] == 3) || ([n intValue] == [anotherNSNumber intValue]))
不,你不能。原因是nil
是指向地址0x0
的指針,即nil == 0
。因此,您將無法在0
和nil
之間消除歧義。
更何況他們也應該是不同類型的事實。 nil
用作指針,而像0或3這樣的數字是標量。
nil
被定義爲
#define nil NULL
的NULL
一個典型的定義是這樣的:
#define NULL ((void *)0)
沒有辦法的辦法,你認爲你可以。第
當你說:
NSNumber *n = nil;
你說的是聲明指向一個NSNumber對象的指針,但是現在有它指向零這是正常的;因爲你以後可能會做的是獲取一個指向NSNumber對象的指針,然後將其分配給這個變量,這樣n
就是一個指針,它不是有效的NSNumber對象。
隨着你的下一行:
n = 3;
你是不是值分配給對象,但你說n
指向地址3.這是不是一個地址,不包含一個東西。
其他人提到的簡短答案是「否」。
但接下來的輕微修改您的代碼將實現類似的結果:
NSNumber *nObject = [NSNumber numberWithInt:3];
int n = nObject.intValue; // Zero if nObject is nil
if(nObject == nil){
// some actions...
} else if (n == 1){
// some actions...
} else {
// some actions...
}
如果nObject爲零,你確定n是0嗎?我寧願猜測它仍然未初始化,並可能有任何價值。 –
當nObject爲零時,n的值確實爲零。這是因爲發送給nil對象的消息總是返回nil,nil是地址零。 'NSNumber * nObject = nil; int n = nObject.intValue; NSLog(@「n的值爲%d」,n);'將輸出「n的值爲0」 – aLevelOfIndirection
NSInteger的是不一樣的NSNumber。 NSNumber是一個類,而NSInteger是一個typedef。 – vikingosegundo
爲什麼你使用NSInteger或int? – mayuur
確實,使用基本int可能是最簡單的解決方案,但我喜歡這樣一個事實,即一個對象可以是「空」,因此零,這顯然不可能與一個int。 – Besi