এক্সকোড ৪.৪ রিলিজ নোটে উল্লিখিত "অবজেক্টিভ-সি লিটারালস" এর বিবরণগুলি কী কী?


188

আমি এক্সকোড ৪.৪ এর জন্য প্রকাশিত নোটগুলি দিয়ে যাচ্ছিলাম এবং এটি লক্ষ্য করেছি:

এলএলভিএম 4.0 সংকলক

এক্সকোডে এখন অ্যাপল এলএলভিএম সংকলক সংস্করণ includes.০ অন্তর্ভুক্ত রয়েছে, যার মধ্যে নিম্নলিখিত নতুন ওবজেক্টিভ-সি ভাষার বৈশিষ্ট্য রয়েছে: [...]
- উদ্দেশ্য-সি আক্ষরিক: এনএসআরাই, এনএসডায়ুরিয় এবং এনএসএনবারের জন্য আক্ষরিক তৈরি করুন, এনএসএসআরটিংয়ের জন্য আক্ষরিক হিসাবে একই

আমি এই বৈশিষ্ট্যটি সম্পর্কে আগ্রহী। এটি সম্পূর্ণরূপে আমাকে মাত্র কিভাবে লিটারেল পরিষ্কার না NSStringকাজ এবং কিভাবে এক তাদের উপর ব্যবহার করতে পারে NSArray, NSDictionaryএবং NSNumber

বিস্তারিত কি?


কোনও উত্তর নয়, তবে এখানে কিছু জল্পনা রয়েছে: reddit.com/r/programming/comments/pso6x/xcode_43_released/…
আরজান টিজমস

3
"এই উপাদানটি কোনও এনডিএ সাপেক্ষে নয়?" আর আপনার সমস্যাটা কি?
হেজাজমান

7
না, অ্যাপল স্পষ্টভাবে বলেছে যে এই সংযোজনগুলি মেলিং তালিকায় এনডিএ নয়।
griotspeak

2
এলএলভিএম এর এতে কয়েকটি নথি রয়েছে: clang.llvm.org/docs/LanguageExtensions.html#objc_lambdas
স্টিভেন ক্র্যামার

3
এখানে অবজেক্টিভ-সি আক্ষরিকের ঝাঁকুনির
ThomasW

উত্তর:


393

Http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsd অভিধান-nsarray- এবং : থেকে ভারব্যাটিম অনুলিপি করা হয়েছে :

অবজেক্টিভ-সি আক্ষরিক: এখন কেউ এনএসআরাই, এনএসডি অভিধান এবং এনএসএনম্বারের জন্য আক্ষরিক তৈরি করতে পারে (ঠিক যেমন কেউ এনএসএসআরংয়ের জন্য আক্ষরিক তৈরি করতে পারে)

এনএসআরারি লিটারালস

পূর্বে:

array = [NSArray arrayWithObjects:a, b, c, nil];

এখন:

array = @[ a, b, c ];

এনএসডিকোয়্যারিয়ান লিটারালস

পূর্বে:

dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
                                   forKeys:@[k1, k2, k3]];

এখন:

dict = @{ k1 : o1, k2 : o2, k3 : o3 };

এনএস নাম্বার লিটারালস

পূর্বে:

NSNumber *number;
number = [NSNumber numberWithChar:'X'];
number = [NSNumber numberWithInt:12345];
number = [NSNumber numberWithUnsignedLong:12345ul];
number = [NSNumber numberWithLongLong:12345ll];
number = [NSNumber numberWithFloat:123.45f];
number = [NSNumber numberWithDouble:123.45];
number = [NSNumber numberWithBool:YES];

এখন:

NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;

[সম্পাদনা]

zxoqhttp://news.ycombinator.com/item?id=3672744 আরো আকর্ষণীয় নতুন subscripting যোগ করা হয়েছে। (আক্ষরিক সহ যুক্ত):

arr[1]      === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]

[সম্পাদনা 2]

নতুন ওজেজেসি লিটারেলগুলি একাধিক ডাব্লুডাব্লুডিসি 2012 সেশনে আলোচনা করা হয়েছিল । আমি ইচ্ছাকৃতভাবে ফাইলের নাম এবং প্রতিটি স্লাইডের সময় সরিয়ে নিই যাতে আপনি নিজের মতো করে নিজের মতো করে খুঁজে পেতে পারেন। তারা এই পোস্টে বর্ণিত হিসাবে মূলত একই জিনিস, তবে কয়েকটি নতুন জিনিসও রয়েছে যা আমি চিত্রগুলির উপরে উল্লেখ করব।

দয়া করে মনে রাখবেন যে চিত্রগুলি সমস্ত বড়। তাদের মূল আকারে দেখার জন্য কেবল তাদের অন্য ট্যাবে টেনে আনুন

লিটারালস এবং বক্সিংিং

[NSNumber numberWithint:42]
[NSNumber numberWithDouble:10.8]
[NSNumber numberWithBool:YES]
[NSNumber numberWithint:6 + x * 2012]

লিটারালস এবং বক্সিংিং

@42
@10.8
@YES
@(6 + x * 2012)

সংগ্রহ সাবস্ক্রিপশন

[NSArray arrayWithObjects: a, b, c, nil]
[array objectAtIndex:i]
[NSDictionary dictionaryWithObjectsAndKeys: v1, k1, v2, k2, nil];
[dictionary valueForKey:k]

সংগ্রহ সাবস্ক্রিপশন

@[a, b, c]
array[i]
@{k1:v1, k2:v2}
dictionary[k]

@ # সংখ্যা, @ {} অভিধান, @ "" স্ট্রিং, @ [] অ্যারে, @ () এক্সপ্রেশন


এই অংশটি নতুন। এক্সপ্রেশন লিটারালস

আপনার যখন কোনও অভিব্যক্তি থাকে ( M_PI / 16উদাহরণস্বরূপ) আপনার এটি বন্ধনীতে রাখা উচিত।

এই সিনট্যাক্সটি অঙ্কের এক্সপ্রেশন, বুলিয়ানস, একটি (সি-) স্ট্রিংয়ের একটি সূচক খুঁজে পাওয়া, বুলিয়ান মান, এনাম ধ্রুবক এবং এমনকি অক্ষরের স্ট্রিংয়ের জন্য কাজ করে!

এক্সপ্রেশন লিটারালস

NSNumber *piOverSixteen = [NSNumber numberWithDouble: (M_PI / 16)];

NSNumber *hexDigit = [NSNumber numberWithChar:"0123456789ABCDEF"[i % 16]];

NSNumber *usesScreenFonts = [NSNumber numberWithBool:[NSLayoutManager usesScreenFonts]];

NSNumber *writingDirection = [NSNumber numberWithInt:NSWritingDirectionLeftToRight];

NSNumber *path = [NSString stringWithUTF8String: getenv("PATH")];

এক্সপ্রেশন লিটারালস

NSNumber *piOverSixteen = @( M_PI / 16 );

NSNumber *hexDigit = @( "0123456789ABCDEF"[i % 16] );

NSNumber *usesScreenFonts = @( [NSLayoutManager usesScreenFonts] );

NSNumber *writingDirection = @( NSWritingDirectionLeftToRight );

NSNumber *path = @( getenv("PATH") );

চরিত্রের স্ট্রিং এবং আপনি / কখন এই আক্ষরিক বাক্য গঠন ব্যবহার করতে পারেন সে সম্পর্কে আরও:

বক্স স্ট্রিং এক্সপ্রেশন

NSString *path = [NSString stringWithUTF8String: getenv("PATH")];
for (NSString *dir in [path componentsSeparatedByString: @":"]) {
    // search for a file in dir...
}

বক্স স্ট্রিং এক্সপ্রেশন

NSString *path = @( getenv("PATH") );
for (NSString *dir in [path componentsSeparatedByString: @":"]) {
    // search for a file in dir...
}

অ্যারে আক্ষরিক কাজ কিভাবে

অ্যারে আক্ষরিক কাজ কিভাবে

// when you write this:
array = @[a, b, c ];

// compiler generates:
id objects[] = { a, b, c };
NSUInteger count = sizeof(objects) / sizeof(id);
array = [NSArray arrayWithObjects:objects count:count];

অভিধান অভিধানে কীভাবে কাজ করে

অভিধান অভিধানে কীভাবে কাজ করে

// when you write this:
dict = @{k1 : o1, k2 : o2, k3 : o3 };

// compiler generates:
id objects[] = { o1, o2, o3 };
id keys[] = { k1, k2, k3 };
NSUInteger count = sizeof(objects) / sizeof(id);
dict = [NSDictionary dictionaryWithObjects:objects
                                   forKeys:keys
                                     count:count];

অ্যারে সাবস্ক্রিপশন সম্পর্কে আরও

অ্যারে সাবস্ক্রিপশন

@implementation SongList {
    NSMutableArray *_songs;
}

- (Song *)replaceSong:(Song *)newSong atindex:(NSUinteger)idx {
    Song *oldSong = [_songs objectAtIndex:idx];
    [_songs replaceObjectAtindex:idx withObject:newSong];
    return oldSong;
}

অ্যারে সাবস্ক্রিপশন

@implementation SongList {
    NSMutableArray *_songs;
}

- (Song *)replaceSong:(Song *)newSong atindex:(NSUinteger)idx {
    Song *oldSong = _songs[idx];
    _songs[idx] = newSong;
    return oldSong;
}    

অভিধান সাবস্ক্রিপশন সম্পর্কে আরও

অভিধান সাবস্ক্রিপশন

@implementation Database {
    NSMutableDictionary *_storage;
}

- (id)replaceObject:(id)newObject forKey:(id <NSCopying>)key {
    id oldObject = [_storage objectForKey:key];
    [_storage setObject:object forKey:key];
    return oldObject;
}

অভিধান সাবস্ক্রিপশন

@implementation Database {
    NSMutableDictionary *_storage;
}

- (id)replaceObject:(id)newObject forKey:(id <NSCopying>)key {
    id oldObject = _storage[key];
    _storage[key] = newObject;
    return oldObject;
}

[সম্পাদনা 3]

এই নতুন আক্ষরিক সম্পর্কে মাইকের অ্যাশের দুর্দান্ত রচনা রয়েছে। আপনি যদি এই জিনিসগুলি সম্পর্কে আরও জানতে চান তবে এটি নিশ্চিত করে দেখুন



9
আমি এই আমার কোডিং দ্রুততর দেখতে পাচ্ছি!
পেড্রো মাঞ্চো

12
এই নতুন স্বরলিপিগুলি সমর্থন করার জন্য কি এক্সকোড ৪.৩ পাওয়ার কোনও উপায় আছে? আমি তাদের চাই - এখন ... কিন্তু করছি তাই না তাদের জন্য ... "মাউন্টেন ঊর্ধ্বগামী"
অ্যালেক্স গ্রে

20
আপনার এখানে চিত্রগুলিতে এম্বেড থাকা প্রচুর পাঠ্য সামগ্রী রয়েছে যা কোনও সরল পাঠ্য হিসাবে পোস্ট করা থাকলে এটি কোনও অনুসন্ধান ইঞ্জিন দ্বারা আরও সন্ধানযোগ্য।
বিল করুন

5
@ বিল্টলিজার্ড আমি শ্রদ্ধার সাথে একমত নই। পরীক্ষা অধিকাংশই পারেন আন-অনুসন্ধানযোগ্য জিনিষ পছন্দ করেন {এবং [বা এগুলির মতো জেনেরিক শব্দ array, idএবং @implementation। প্রাসঙ্গিক কীওয়ার্ড হয় literal, objcএবং xcodeনা নির্দিষ্ট উল্লেখ [বা @implementation। আপনি চাইছেন না যে এই প্রশ্নটি গুগলে সাধারণ ওবিজেসি প্রশ্নের জন্য প্রদর্শিত হবে, এটি কেবল তখনই প্রদর্শিত হবে যখন কেউ জিজ্ঞাসা করে objc literal, যা বর্তমানে ঘটে (শিরোনাম এবং ট্যাগগুলির জন্য ধন্যবাদ)।
পুরিয়া আজিমি

4
এখন এটিকে স্ট্যাকওভারফ্লো উত্তর বলে। ভালো চাকরি পুরিয়া।
নীতিশ

15

অবজেক্টিভ-সি সংকলকটির NSConstantStringক্লাসের উদাহরণগুলির মেমরি লেআউটটির জ্ঞানকে হার্ডকোড করা হয়েছে , ক্লাস ওরফে __CFConstantString। ঝনঝন সোর্স কোডে RewriteObjCStringLiteralফাংশনটি দেখুন lib/Rewrite/RewriteModernObjC.cpp। সংকলকটি সহজেই এমন ডেটা নির্গত করে যা NSConstantStringশ্রেণীর উদাহরণগুলির বিন্যাসের সাথে মেলে ।

আক্ষরিক NSArrayএবং NSDictionaryদৃষ্টান্তগুলির জন্য বেশ কয়েকটি সম্ভাবনা রয়েছে । তারা আক্ষরিক স্ট্রিংয়ের জন্য যেমনটি করেছিলেন তেমন কিছু করতে পারে - সংকলকটিতে উদাহরণ লেআউটটি (একটি বিশেষ সাবক্লাসের জন্য) হার্ডকোড করে এবং সেই বিন্যাসে ডেটা নির্গত করে। অথবা তাদের সংকলক ইমিট কোড থাকতে পারে যা রানটাইম এ কেবল একটি উদাহরণ তৈরি করে।


2
জন্য বস্তু আক্ষরিক সিনট্যাক্স বাস্তবায়ন NSArrayএবং NSDictionaryবেশ যে অসদৃশ হয় NSString। সংকলক কেবল রানটাইমে NSDictionaryবা NSArrayসময়ে কল উত্পন্ন করে । এই কারণেই বৈশ্বিক চলকগুলি এই সিনট্যাক্সটি (বিপরীত NSString) ব্যবহার করে আরম্ভ করা যায় না । এই ফলাফলটি একটি সংকলন সময় ধ্রুবক হতে হবে।
বাজি

1

থেকে "উদ্দেশ্য সি লিটারেল"

1) NSNumber, NSDictionaryএবং NSArrayআক্ষরিকগুলি এক্সকোড ৪.৪ এ উপলব্ধ ।

2) NSDictionaryএবং NSArrayসাবস্ক্রিপশনের জন্য " এক্সকোড 4.4 এবং ওএস এক্স 10.8 বা তার পরে এসডিকে " বা " এক্সকোড 4.5 এবং আইওএস 6 বা তার পরে এসডিকে " দরকার

আমার কাছে দেখে মনে হচ্ছে সাবস্ক্রিপশনটির রানটাইম সমর্থন দরকার এবং তাই iOS6 এর আগে কাজ করবে না ।


একই নিবন্ধে এটি বলেছে যে 'আইওএস ডিপ্লোয়মেন্ট' কলামে "আইওএস 4-এ ফিরে আসে"
007

1
আমি দুর্ঘটনাক্রমে এমন একটি প্রকল্পে অ্যারে লিটারাল ব্যবহার করেছি যা আমি এক্সকোড ৪.৪ দিয়ে সংকলিত করেছি। এটি আইপ্যাড চলমান একটি আইপ্যাডে সূক্ষ্মভাবে চলে। এটি এক্সকোড ৪.২-এ সংকলন করে না, এটি আমি কীভাবে জানতে পেরেছিলাম।
জেএসকারি

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