मैं NSNumber कैसे बढ़ाऊं?
यानी myNSNumber ++
मैं NSNumber कैसे बढ़ाऊं?
यानी myNSNumber ++
जवाबों:
अपडेट: FYI करें, मैं व्यक्तिगत रूप से बोल्टकॉक और डार्कडस्ट के एक-लाइन के उत्तर को बेहतर तरीके से पसंद करता हूं। वे अधिक संक्षिप्त हैं, और अतिरिक्त चर की आवश्यकता नहीं है।
वेतन वृद्धि के क्रम में 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 नहीं है...
...आपके इच्छित नंबर के लिए एक प्लेसहोल्डर है।
किसी के लिए जो Xcode के नवीनतम संस्करण का उपयोग कर रहा है (इसे 4.4.1, SDK 5.1 के रूप में लिख रहा है), ऑब्जेक्ट शाब्दिक के उपयोग के साथ, आप कोड को थोड़ा और भी साफ कर सकते हैं ...
NSNumber *x = @(1);
x = @([x intValue] + 1);
// x = 2
अभी भी बॉक्सिंग से निपटने के लिए एक तरह का दर्द और साधारण ऑपरेशन करने के लिए सब कुछ अनबॉक्स करना, लेकिन यह बेहतर हो रहा है, या कम से कम कम हो रहा है।
उन सभी को एक साथ रखो, और आपके पास है:
myNSNumber = @(myNSNumber.intValue + 1);
NSNumberवस्तुओं को अपरिवर्तनीय (?)
मुझे डॉट अभिव्यक्ति पसंद है क्योंकि यह अधिक संक्षिप्त है और यही कारण है कि IOS इसे पहली जगह में समर्थन करता है:
myNSNumber = [NSNumber numberWithInt:myNSNumber.intValue + 1];
यदि आप इसका उपयोग अभिन्न मूल्य को संग्रहीत करने के लिए कर रहे हैं:
myNSNumber = @(myNSNumber.longLongValue + 1);
फ़्लोटिंग पॉइंट सामान के लिए संक्षिप्त उत्तर निम्नलिखित है, लेकिन ऐसा करने के लिए एक बुरा विचार है, आप सटीक ढीले होंगे और यदि आप बाद में किसी भी तरह की तुलना कर रहे हैं जैसे [myNSNumber isEqual: @ (4.5)] तो आप आश्चर्यचकित हो सकते हैं :
myNSNumber = @(myNSNumber.floatValue + 1);
यदि आपको ऑब्जेक्ट-सी में ऑब्जेक्ट के रूप में दर्शाने वाले फ्लोटिंग पॉइंट नंबरों पर गणित करने की आवश्यकता है (यानी यदि आपको उन्हें सरणियों, शब्दकोशों, आदि में डालने की आवश्यकता है) तो आपको उपयोग करना चाहिए NSDecimalNumber।
भविष्य के उपयोग को आसान बनाने के लिए एक श्रेणी का उपयोग करें। यहाँ एक मूल विचार है।
- (void)incrementIntBy:(int)ammount {
self = [NSNumber numberWithInt:(self.intValue + ammount)];
}
इस सवाल के जवाब में अच्छी जानकारी के बहुत सारे। मैंने अपने कोड में चयनित उत्तर का उपयोग किया और यह काम किया। फिर मैंने बाकी पोस्टों को पढ़ना शुरू किया और कोड को बहुत सरल कर दिया। यह पढ़ना थोड़ा कठिन है कि क्या आप एक्सकोड 5 में पेश किए गए नोटेशन के परिवर्तनों से परिचित नहीं हैं, लेकिन यह बहुत साफ है। मैं शायद इसे सिर्फ एक लाइन बना सकता था, लेकिन फिर यह पता लगाना थोड़ा मुश्किल है कि मैं क्या कर रहा हूं।
मैं एक 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 *, हमेशा यह देखने के लिए जांचें कि क्या आदिम प्रकार पर्याप्त होगा।