NSNumber কে অবজেক্টিভ-সি তে রূপান্তর করুন


122

আমি এনএসডেমারিতে কোনও এনএসডি অভিধানে যুক্ত করার আগে কোনও এনএসএনম্বারে একটি সংখ্যাকে রূপান্তর করতে [NSNumber numberWithInt:42]বা ব্যবহার করি @(42):

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

আমি যখন এনএসডি অভিধান থেকে মানটি পুনরুদ্ধার করি তখন আমি কীভাবে এটিকে এনএসএনম্বার থেকে ইনট এ রূপান্তর করতে পারি?

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

এটি ব্যতিক্রম ছুঁড়ে বলেছে কাস্টিং প্রয়োজন হয় যখন আমি এইভাবে এটি করি:

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

উত্তর:


192

ডকুমেন্টেশন একবার দেখুন । intValueপদ্ধতিটি ব্যবহার করুন :

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

অন্তর্নিহিত রূপান্তরটি এখন আরসি-র সাথে অনুমোদিত নয়।
আলেকজান্ডার

মূলত [key intValue](কীটি হ'ল NSNumber)
ব্যবহারকারী 924

61

আপনার NSIntegerযখন সম্ভব হয় তথ্যের ধরণে আটকে থাকা উচিত । সুতরাং আপনি এই জাতীয় নম্বর তৈরি করতে চান:

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

ডিকোডিং integerValueপদ্ধতিটির সাথে তখন কাজ করে:

NSInteger value = [number integerValue];

কেন সে তার সাথে লেগে থাকবে NSInteger?
Iulian Onofrei

1
intহ্যাঁ, খুব আদিম। তবে এটি সর্বাধিক অনুমোদিত নম্বর কম স্পষ্টভাবে সংজ্ঞায়িত করা হয়। NSIntegerমূলত কিছু আদিম সংখ্যার প্রাথমিক নাম যা 32 বিটি মেশিনে 32 বিট এবং 64 বিবিটি ডিভাইসে 64 বিট হিসাবে পরিচিত bit
ম্যাক্স সলেমান

1
হ্যাঁ, অ্যাপল পরামর্শ দেয়।
ম্যাক্স সলেমান

1
আমি নেটিভ সংখ্যা গাণিতিক সম্পর্কে কিছু অনুমান না করার পরামর্শ দিই। আপনি নিশ্চিতভাবে ব্যবহার করতে পারেন int, তবে ক্রস প্ল্যাটফর্মের লিবসের সাথে ইন্টারফেসিং ব্যতীত এটি করার খুব কম বিষয় রয়েছে। এবং তারপরেও এর মতো কিছু uint32_tব্যবহার করা ভাল।
ম্যাক্স সলেমান

1
এটি করা অবশ্যই প্ল্যাটফর্ম কোডিং মানগুলির সাথে আরও সুসংগত করবে yes
সর্বোচ্চ স্লেমান



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.