ฉันจะเพิ่ม NSNumber ได้อย่างไร
เช่น myNSNumber ++
ฉันจะเพิ่ม NSNumber ได้อย่างไร
เช่น myNSNumber ++
คำตอบ:
อัปเดต: FYI โดยส่วนตัวแล้วฉันชอบคำตอบแบบบรรทัดเดียวของ BoltClock และ DarkDusts ดีกว่า มีความกระชับมากขึ้นและไม่ต้องการตัวแปรเพิ่มเติม
ในการเพิ่มค่าNSNumber
คุณจะต้องได้รับมูลค่าเพิ่มและจัดเก็บเป็นNSNumber
ไฟล์.
ตัวอย่างเช่นสำหรับการNSNumber
ถือครองจำนวนเต็ม:
NSNumber *number = [NSNumber numberWithInt:...];
int value = [number intValue];
number = [NSNumber numberWithInt:value + 1];
หรือสำหรับการNSNumber
ถือครองตัวเลขทศนิยม:
NSNumber *number = [NSNumber numberWithDouble:...];
double value = [number doubleValue];
number = [NSNumber numberWithDouble:value + 1.0];
...
อะไร นั่นเป็นการอ้างอิงรหัสหลอกใช่ไหม XCode ไม่...
...
เป็นเพียงตัวยึดสำหรับหมายเลขใด ๆ ที่คุณต้องการ
NSNumber
วัตถุไม่เปลี่ยนรูป สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือคว้าค่าดั้งเดิมเพิ่มขึ้นจากนั้นรวมผลลัพธ์ไว้ในNSNumber
วัตถุของมันเอง:
NSNumber *bNumber = [NSNumber numberWithInt:[aNumber intValue] + 1];
สำหรับใครก็ตามที่ใช้ Xcode เวอร์ชันล่าสุด (เขียนเป็น 4.4.1, SDK 5.1) ด้วยการใช้ตัวอักษรของวัตถุคุณสามารถทำความสะอาดโค้ดได้มากขึ้นอีกเล็กน้อย ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
ยังคงเป็นความเจ็บปวดที่ต้องรับมือกับการชกมวยและการแกะทุกอย่างเพื่อดำเนินการง่ายๆ แต่ก็ดีขึ้นเรื่อย ๆ หรืออย่างน้อยก็สั้นลง
NSNumbers ไม่เปลี่ยนรูปคุณต้องสร้างอินสแตนซ์ใหม่
// Work with 64 bit to support very large values
myNSNumber = [NSNumber numberWithLongLong:[myNSNumber longLongValue] + 1];
// EDIT: With modern syntax:
myNSNumber = @([myNSNumber longLongValue] + 1);
รวมทั้งหมดเข้าด้วยกันและคุณมี:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumber
วัตถุไม่เปลี่ยนรูป (?)
ฉันชอบนิพจน์ดอทเพราะมันกระชับกว่าและนั่นคือเหตุผลที่IOSรองรับตั้งแต่แรก:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
หากคุณกำลังใช้มันเพื่อเก็บค่าหนึ่ง:
myNSNumber = @(myNSNumber.longLongValue + 1);
สำหรับสิ่งที่เป็นจุดลอยตัวคำตอบสั้น ๆ มีดังต่อไปนี้ แต่เป็นความคิดที่ดีที่จะทำเช่นนี้คุณจะสูญเสียความแม่นยำและหากคุณทำการเปรียบเทียบในภายหลังเช่น [myNSNumber isEqual: @ (4.5)] คุณอาจแปลกใจ :
myNSNumber = @(myNSNumber.floatValue + 1);
หากคุณจำเป็นต้องทำคณิตศาสตร์ในตัวเลขทศนิยมแสดงเป็นวัตถุใน Objective-C (เช่นถ้าคุณต้องการที่จะใส่ไว้ในอาร์เรย์, พจนานุกรม, ฯลฯ ) NSDecimalNumber
คุณควรใช้
ใช้หมวดหมู่เพื่อสะดวกในการใช้งานในอนาคต นี่คือแนวคิดพื้นฐาน
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
ข้อมูลดีๆมากมายในคำตอบสำหรับคำถามนี้ ฉันใช้คำตอบที่เลือกในรหัสของฉันและได้ผล จากนั้นฉันก็เริ่มอ่านบทความที่เหลือและทำให้โค้ดง่ายขึ้นมาก อ่านยากกว่าเล็กน้อยหากคุณไม่คุ้นเคยกับการเปลี่ยนแปลงสัญกรณ์ที่เปิดตัวใน Xcode 5 แต่จะสะอาดกว่ามาก ฉันอาจจะทำให้มันเป็นแค่บรรทัดเดียว แต่มันก็ยากเกินไปที่จะคิดออกว่าฉันกำลังทำอะไรอยู่
ฉันกำลังจัดเก็บ NSNumber ในพจนานุกรมและต้องการเพิ่มจำนวน ฉันเข้าใจแล้วแปลงเป็น int เพิ่มขึ้นในขณะที่แปลงเป็น NSNumber จากนั้นใส่กลับเข้าไปในพจนานุกรม
รหัสเก่า
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
int correctValue = [correct intValue];
correct = [NSNumber numberWithInt:correctValue + 1];
[scoringDictionary removeObjectForKey:@"correct"];
scoringDictionary[@"correct"] = correct;
รหัสใหม่
NSNumber *correct = [scoringDictionary objectForKey:@"correct"];
scoringDictionary[@"correct"] = @(correct.intValue + 1);
NSNumber *
โปรดตรวจสอบเสมอว่าประเภทดั้งเดิมจะเพียงพอหรือไม่