অবজেক্টিভ-সি-তে জাভা-র “ইনসেন্টফ” কীওয়ার্ডের সমতুল্য কী?


185

আমি যাচাই করতে চাই যে কোনও বস্তু (উদাহরণস্বরূপ someObject) অন্য ধরণের (যেমন SpecifiedType) কোনও ভেরিয়েবলের জন্য নির্ধারিত (-ালাই সক্ষম) রয়েছে কিনা whether জাভাতে, আমি লিখতে পারি:

someObject instanceof SpecifiedType

একটি সম্পর্কিত প্রশ্ন অনুসন্ধান করছে যে কোনও অবজেক্টের রানটাইম টাইপ অন্য ধরণের সমান কিনা। জাভাতে, আমি লিখতে পারি:

someObject.getClass().equals(SpecifiedType.class)

এটি কীভাবে উদ্দেশ্য-সি-তে করা যেতে পারে?


উত্তর:


264

[myObject class]কোনও বস্তুর শ্রেণি ফেরার জন্য চেষ্টা করুন ।

আপনি এর সাথে সঠিক তুলনা করতে পারেন:

if ([myObject class] == [MyClass class])

তবে সরাসরি MyClassসনাক্তকারী ব্যবহার করে নয় ।

একইভাবে, আপনি আবিষ্কার করতে পারেন যে বিষয়টি যদি আপনার শ্রেণীর সাবক্লাসের সাথে থাকে:

if ([myObject isKindOfClass:[AnObject class]])

জোন স্কিটি এবং জুলের পরামর্শ অনুসারে


উদাহরণস্বরূপ "আনোবজেক্ট" টাইপের কোনও অবজেক্টের সাথে সাম্যতা কীভাবে পরীক্ষা করব?
দিমিত্রিস

"যদি ([মায়োবজেক্ট ক্লাস] == [আনোবজেক্ট ক্লাস])" বা, জন স্কিটি এবং জুলের পরামর্শ অনুসারে: "যদি ([মাইঅবজেক্ট #KindOfClass: [আনোবজেক্ট ক্লাস]])" "
মউভিচিয়েল

8
সঠিক তুলনা এছাড়াও করা যেতে পারেif ([myObject isMemberOfClass:[MyClass class]])
user102008

37

উইকিপিডিয়া থেকে :

উদাহরণস্বরূপ- সিতে, উদাহরণস্বরূপ, জেনেরিক Objectএবং NSObject(কোকো / ওপেন স্টেপ) উভয়ই সেই পদ্ধতিটি সরবরাহ করে isMemberOfClass:যা trueযদি পদ্ধতির পক্ষে যুক্তি নির্দিষ্ট শ্রেণীর উদাহরণ হিসাবে উপস্থিত হয় returns isKindOfClass:যুক্তিটি নির্দিষ্ট শ্রেণি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হলে পদ্ধতিটি অ্যানালগালিস্টভাবে সত্য করে।

isKindOfClass:instanceofএর শব্দে সবচেয়ে কাছের হবে।


9

এনএসবজেক্ট ডকুমেন্টেশনে #KindOfClass: পদ্ধতিটি দেখুন । (এই জাতীয় প্রশ্নের সতর্কতার স্বাভাবিক শব্দটি হ'ল বস্তুর শ্রেণি পরীক্ষা করা প্রায়শই কোনও ভুল করার লক্ষণ।


2
কেবল নীচের "উত্তর" থেকে অনুলিপি করা হচ্ছে: "@ জুল - ক্লাসের ধরণী পরীক্ষা করা কেন খারাপ বিবেচনা করা হয়? এটি কি ভাল প্রতিরক্ষামূলক প্রোগ্রাম নয় বা আপনি বিতর্ক করছেন যে এটি অপ্রয়োজনীয় হওয়া উচিত?"
ড্যান রোজনস্টার্ক

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

@ জৌল সেই নির্দিষ্ট ক্ষেত্রে এটি কেবল সহজ অনভিজ্ঞতা হবে, কেউ সম্ভবত ব্যবহার করতে পারেন + (BOOL)conformsToProtocol:(Protocol *)aProtocol
এরিকলাইফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.