- @objc
অনুমান কি ? কি হচ্ছে?
ইন Swift 3
, সংকলকটি @objc
বেশ কয়েকটি জায়গায় অনুমান করে যাতে আপনার দরকার হয় না। অন্য কথায়, এটি @objc
আপনার জন্য যোগ করা নিশ্চিত করে !
ইন Swift 4
, সংকলক আর এটি করে না (যত বেশি)। আপনাকে এখন @objc
স্পষ্টভাবে যুক্ত করতে হবে ।
ডিফল্টরূপে, আপনার যদি প্রাক-সুইফট 4 প্রকল্প থাকে তবে আপনি এই সম্পর্কে সতর্কতা পাবেন। একটি সুইফট 4 প্রকল্পে আপনি বিল্ড ত্রুটি পাবেন। এটি SWIFT_SWIFT3_OBJC_INFERENCE
বিল্ড সেটিংসের মাধ্যমে নিয়ন্ত্রণ করা হয় । প্রাক-সুইফট 4 প্রকল্পে এটি সেট করা আছে On
। আমি এটি Default
(বা Off
) এ সেট করার পরামর্শ দেব যা এখন নতুন প্রকল্পের ডিফল্ট বিকল্প।
সবকিছুকে রূপান্তর করতে কিছুটা সময় লাগবে, তবে এটি যেহেতু সুইফট 4-এর জন্য ডিফল্ট, তাই এটি করা মূল্যবান।
- আমি কীভাবে সংকলক সতর্কতা / ত্রুটি বন্ধ করব?
আপনার কোড রূপান্তর করতে দুটি উপায় আছে যাতে সংকলক অভিযোগ না করে।
একটি হ'ল @objc
প্রতিটি ফাংশন বা ভেরিয়েবলের উপর ব্যবহার করা যা উদ্দেশ্য-সি রানটাইমের সংস্পর্শে আসা দরকার:
@objc func foo() {
}
অন্যটি হ'ল ঘোষণা @objcMembers
দ্বারা ব্যবহার করা Class
। এটি শ্রেণিতে সমস্ত ফাংশন এবং ভেরিয়েবল স্বয়ংক্রিয়ভাবে যুক্ত @objc
করার বিষয়টি নিশ্চিত করে । এটি সহজ উপায়, তবে এটির একটি ব্যয় রয়েছে, উদাহরণস্বরূপ, এটি ফাংশনগুলি প্রকাশের দ্বারা আপনার অ্যাপ্লিকেশনটির আকার বাড়াতে পারে যা প্রকাশের প্রয়োজন হয় নি।
@objcMembers class Test {
}
- কি @objc
এবং কেন এটি প্রয়োজনীয়?
আপনি যদি একটি সুইফ্ট ক্লাসে নতুন পদ্ধতি বা ভেরিয়েবলগুলি প্রবর্তন করেন তবে সেগুলিকে চিহ্নিত করে @objc
ওপজেক্টিভ-সি রানটাইমটিতে প্রকাশ করে। আপনি উদ্দেশ্য সি কোড আপনার সুইফট বর্গ ব্যবহার করে, বা, যদি আপনি চান উদ্দেশ্য সি-টাইপ বৈশিষ্ট্য ব্যবহার করছেন থাকে তখন এই প্রয়োজনীয় Selectors
। উদাহরণস্বরূপ, লক্ষ্য-অ্যাকশন প্যাটার্ন:
button.addTarget(self, action:#selector(didPressButton), for:.touchUpInside)
- আমি কেন সব কিছু চিহ্নিত করব না @objc
?
এমন কিছু নেতিবাচক রয়েছে যা কিছু চিহ্নিত করার সাথে আসে @objc
:
- বাইনারি আকারের বর্ধিত অ্যাপ্লিকেশন
- কোনও ফাংশন ওভারলোডিং নেই
দয়া করে মনে রাখবেন যে এটি খুব উচ্চ-স্তরের সংক্ষিপ্তসার এবং এটি আমার লেখার চেয়ে জটিল। আমি আরও তথ্যের জন্য আসল প্রস্তাবটি পড়ার সুপারিশ করব।
সূত্র: