उद्देश्य-सी में int के लिए NSNumber कन्वर्ट करें


122

मैं NSNumber से एक NS कन्वर्टर को जोड़ने से पहले एक इंट का उपयोग करता हूं [NSNumber numberWithInt:42]या @(42)परिवर्तित करता हूं :

int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };

जब मैं NSDictionary से मान प्राप्त करते हैं, तो मैं इसे वापस NSNumber से int में कैसे बदल सकता हूँ?

NSNumber *number = dict[@"integer"];
int *intNumber = // ...?

यह कहते हुए कि जब मैं इसे इस तरह करता हूं तो कास्टिंग की आवश्यकता होती है:

int number = (int)dict[@"integer"];

जवाबों:


192

प्रलेखन पर एक नजर है । intValueविधि का प्रयोग करें :

NSNumber *number = [dict objectForKey:@"integer"];
int intValue = [number intValue];

अब ARC के साथ इंप्लसिट रूपांतरण को अस्वीकृत कर दिया गया है।
अलेक्जेंडर

मूल रूप से [key intValue](कुंजी है NSNumber)
user924

61

NSIntegerजब संभव हो तो आपको डेटा प्रकारों से चिपके रहना चाहिए । तो आप इस तरह संख्या बनाएंगे:

NSInteger myValue = 1;
NSNumber *number = [NSNumber numberWithInteger: myValue];

डिकोडिंग integerValueतब विधि के साथ काम करता है :

NSInteger value = [number integerValue];

वह क्यों चिपके रहना चाहिए NSInteger?
इयूलियन ओनोफ्रेई

1
intआदिम भी है, हाँ। हालाँकि, यह अधिकतम अनुमत संख्या कम सटीक परिभाषित है। NSIntegerअनिवार्य रूप से सिर्फ कुछ आदिम पूर्णांक प्रकार के लिए एक उपनाम है जिसे 32 बिट मशीनों पर 32 बिट और 64 बिट उपकरणों पर 64 बिट के रूप में जाना जाता है।
मैक्स सीलेमैन

1
हाँ, Apple का सुझाव है।
मैक्स सीलेमन

1
मैं मूल संख्या अंकगणित के बारे में कुछ भी निर्देशित नहीं करने की सलाह दूंगा। आप निश्चित रूप से उपयोग कर सकते हैं int, लेकिन ऐसा करने के लिए बहुत कम बिंदु हैं, केवल क्रॉस-प्लेटफ़ॉर्म के साथ इंटरफेस को छोड़कर। और फिर भी कुछ uint32_tका उपयोग करना बेहतर होगा।
मैक्स सीलेमन

1
ऐसा करने से निश्चित रूप से यह प्लेटफ़ॉर्म कोडिंग मानकों के अनुरूप होगा, हाँ।
मैक्स सीलेमैन



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.