কোনও ভেরিয়েবলের সাথে অন্যটির সাথে তুলনা করার আগে একটি স্ট্রিং নির্ধারণ করা কি প্রয়োজনীয়?


85

আমি একটি এর মান NSString"Wrong" স্ট্রিংয়ের সাথে তুলনা করতে চাই । আমার কোডটি এখানে:

NSString *wrongTxt = [[NSString alloc] initWithFormat:@"Wrong"];
if( [statusString isEqualToString:wrongTxt] ){
     doSomething;
}

আমাকে কি সত্যই "ভুল" এর জন্য একটি এনএসএসস্ট্রিং তৈরি করতে হবে?

এছাড়াও, আমি একটি মান তুলনা করতে পারবেন UILabelএর textএকটি স্ট্রিং লেবেল ভ্যালু এসাইন না একটি স্ট্রিং কিভাবে?


যাইহোক, আপনি initWith Format এর সাথে সময় নষ্ট করছেন, আপনি এনএসএসআরটিং * ভুলটেক্সট = [[এনএসএসটিং বরাদ্দ] #WithFormat: @ "ভুল"] পরিবর্তন করতে পারেন; যাও এনএসএসআরটিং * चुकीটেক্সট = @ "ভুল"; যদি আপনি অন্যান্য ইনপুট থেকে কোনও স্ট্রিং গণনা করার চেষ্টা করতে যাচ্ছেন তবে কেবলমাত্র ডিবিউথফর্ম্যাট দিয়ে বিরক্ত করুন যেমন এনএসএসটিং * ভুলটিএসটি = [[এনএসএসআরটিং বরাদ্দ] #Withformat: @ "% @ ভুল% d বার ছিল", ক্রেগস্ট্রিং, ভুলকন্ট]];
ক্রেগ

উত্তর:


178

আমাকে কি সত্যই "ভুল" এর জন্য একটি এনএসএসস্ট্রিং তৈরি করতে হবে?

না, কেন শুধু করবেন না:

if([statusString isEqualToString:@"Wrong"]){
    //doSomething;
}

ব্যবহার করা @""সহজভাবে একটি স্ট্রিং আক্ষরিক তৈরি করে, যা একটি বৈধ NSString

এছাড়াও, আমি কি কোনও ইউআইএলবেল.টেক্সটের মানকে স্ট্রিংয়ের সাথে লেবেল মান নির্ধারণ না করে একটি স্ট্রিংয়ের সাথে তুলনা করতে পারি?

হ্যাঁ, আপনি এর মতো কিছু করতে পারেন:

UILabel *label = ...;
if([someString isEqualToString:label.text]) {
    // Do stuff here 
}

ওই কাজগুলো. আমার মনে হয় আমার কাছে বগি কোড আছে। এটি আগে একটি ব্যতিক্রম ছোঁড়া ছিল।
ব্রায়ান

4
সম্প্রসারিত করার জন্য: label.text IS একটি স্ট্রিং, তাই অবশ্যই আপনি তুলনা জন্য তা থেকে একটি স্ট্রিং তৈরি করা প্রয়োজন হবে না।
Amagrammer


8

ব্রায়ান, এখানে নিক্ষেপযোগ্য - অন্যরা অবশ্যই সঠিক যে আপনার স্ট্রিং ভেরিয়েবল ঘোষণার দরকার নেই। তবে, পরের বার আপনি কোনও স্ট্রিং ঘোষণা করতে চান আপনাকে নিম্নলিখিতগুলি করার দরকার নেই:

NSString *myString = [[NSString alloc] initWithFormat:@"SomeText"];

যদিও উপরেরগুলি কাজ করে তবে এটি একটি রক্ষণাবেক্ষণ করা এনএসএসস্ট্রিং ভেরিয়েবল সরবরাহ করে যা আপনাকে এটি ব্যবহার শেষ করে স্পষ্টভাবে প্রকাশ করতে হবে।

পরের বার আপনি একটি স্ট্রিং ভেরিয়েবল চান আপনি "@" প্রতীকটি আরও বেশি সুবিধাজনক উপায়ে ব্যবহার করতে পারেন:

NSString *myString = @"SomeText";

এটি শেষ হয়ে গেলে এটি স্বাবলম্বিত হবে যাতে আপনি মেমরির ফাঁসও এড়াতে পারবেন ...

আশা করি এইটি কাজ করবে!


আমি তা দেখে বিস্মিত হলাম. আমি প্রায়শই স্ট্রিং ভেরিয়েবলগুলি দেখতে পাই যা অবজেক্টিভ সি অবজেক্টস হয় তবে সেগুলি কখনও প্রকাশ হয় না। ধন্যবাদ!
ব্রায়ান

4
ইঙ্গিতটি "বরাদ্দ" বিটে রয়েছে। আপনি যদি অলোক (বা অনুলিপি) ব্যবহার করেন তবে আপনাকে বিশেষভাবে প্রকাশ করতে হবে। আপনি যদি না করেন, তবে কনভেনশনটি হ'ল অবজেক্টটি ইতিমধ্যে স্বতঃসীমাতে সেট করা হবে।
h4xxr

হ্যাঁ, যদিও এটিতে newবা copyউদাহরণস্বরূপ newObject(থেকে NSDictionaryController) বা mutableCopy(থেকে NSObject) বিকাশকারী.অ্যাপল.
com/ ডকুমেন্টেশন / কোকো / কনসেপ্টুয়াল / মেমরি এমজিএমটি /…

2

আপনি এনএসএস স্ট্রিং ক্লাসের পদ্ধতিগুলিও ব্যবহার করতে পারেন যা একটি স্বতঃস্ফূর্ত উদাহরণ তৈরি করবে এবং স্ট্রিং ফর্ম্যাটিংয়ের মতো আরও বিকল্প থাকবে:

NSString *myString = [NSString stringWithString:@"abc"];
NSString *myString = [NSString stringWithFormat:@"abc %d efg", 42];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.