সুইফটে 'ওপেন' কীওয়ার্ডটি কী?


334

ObjectiveC.swiftমান লাইব্রেরি থেকে ফাইল লাইন 228 চারপাশের কোডের নিম্নলিখিত কয়েক লাইন রয়েছে:

extension NSObject : Equatable, Hashable {
  /// ...
  open var hashValue: Int {
    return hash
  }
}

open varএই প্রসঙ্গে অর্থ কী , বা openসাধারণভাবে কীওয়ার্ডটি কী ?


2
সম্ভবত সম্পর্কিত: স্ট্যাকওভারফ্লো / প্রশ্ন / 24003918/… (" openএবং এর মধ্যে পার্থক্য কী public?")
আহমদ এফ

পার্শ্ব দ্রষ্টব্য: "ওপেন" মূল শব্দটি "এক্সটেনশনের জন্য উন্মুক্ত, পরিবর্তনের জন্য বন্ধ করা" ধারণাটি থেকে এসেছে
সজ্জাদ হিছাইন খান

উত্তর:


572

open বাস্তবায়নের সাথে সূচিত সুইফ্ট 3-এ একটি নতুন অ্যাক্সেস স্তর

এটি অগাস্ট 7, 2016 থেকে সুইফট 3 স্ন্যাপশটের সাথে এবং এক্সকোড 8 বিটা 6 সহ উপলব্ধ।

সংক্ষেপে:

  • একটি openশ্রেণি নির্ধারণযোগ্য মডিউলটির বাইরে অ্যাক্সেসযোগ্য এবং উপশ্রেণীযোগ্য । কোনও openশ্রেণীর সদস্য নির্ধারণযোগ্য মডিউলের বাইরে অ্যাক্সেসযোগ্য এবং ওভাররিডেবল
  • একটি publicশ্রেণি অ্যাক্সেসযোগ্য তবে সংজ্ঞায়িত মডিউলটির বাইরে সাবক্লাসেবল নয় । কোনও publicশ্রেণীর সদস্য অ্যাক্সেসযোগ্য তবে সংজ্ঞায়িত মডিউলটির বাইরে ওভাররিডযোগ্য নয়

তাই openকি publicপূর্ববর্তী সুইফট রিলিজ এবং এর অ্যাক্সেস ব্যবহার করা হয় publicসীমাবদ্ধ করা হয়েছে। অথবা, ক্রিস ল্যাটনার যেমন এটি SE-0177 এ রেখেছেন : জনসাধারণের অ্যাক্সেস এবং পাবলিক ওভারডেবিলিটির মধ্যে পার্থক্যকে মঞ্জুরি দিন :

"উন্মুক্ত" এখন কেবল "জনসাধারণের চেয়ে বেশি প্রকাশ্য", খুব সাধারণ এবং পরিষ্কার মডেল সরবরাহ করে।

আপনার উদাহরণে, open var hashValueএমন একটি সম্পত্তি যা অ্যাক্সেসযোগ্য এবং NSObjectসাবক্লাসগুলিতে ওভাররাইড করা যেতে পারে ।

আরও উদাহরণ এবং বিশদগুলির জন্য, SE-0117 এ দেখুন ।


16
তাই publicসুইফ্ট 3-এ সুইফট 2-এর মতো public final, আর openকি public?
ক্ল্যাশসফ্ট

16
@Clashsoft: "খুলুন" সুইফট 3 সুইফট 2. মত "পাবলিক" হয় "সর্বজনীন" সুইফট 3 সুইফট 2. কি কোন সমতুল আছে (একটি চূড়ান্ত বর্গ এ সব এমনকি একই মডিউলে subclassed করা যাবে না,।)
মার্টিন আর

59
এটি হাস্যকরভাবে পাল্টা। সংক্ষিপ্তসার জন্য ধন্যবাদ।
গোল্ডেনজো

7
@ মাইকস এর সাথে সম্মত হন, এবং পশ্চাদপটে সামঞ্জস্যতার অভাব এটিকে একটি ভয়াবহ জগাখিচুড়ি করে তোলে।
হিউঘুঘটওটল

14
@ মাইকস আপেল - এটি অপ্রয়োজনীয় হলেও আলাদা মনে করুন।
বরুণ নাথ

12

হিসাবে খোলা পড়ুন

অন্যান্য মডিউলে উত্তরাধিকারের জন্য উন্মুক্ত

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

অ্যাপল ডক্স থেকে :

উন্মুক্ত অ্যাক্সেস কেবলমাত্র ক্লাস এবং শ্রেণীর সদস্যদের জন্য প্রযোজ্য এবং এটি নিম্নলিখিত হিসাবে জনসাধারণের প্রবেশাধিকার থেকে পৃথক:

  1. সার্বজনীন অ্যাক্সেস সহ ক্লাসগুলি বা আরও যে কোনও সীমাবদ্ধ অ্যাক্সেস স্তর রয়েছে কেবলমাত্র মডিউল যেখানে তাদের সংজ্ঞায়িত করা হয়েছে তার মধ্যে সাবক্ল্যাস করা যেতে পারে।

  2. সার্বজনীন অ্যাক্সেস সহ শ্রেণীর সদস্যগণ বা আরও যে কোনও বিধিনিষেধযুক্ত অ্যাক্সেস স্তর রয়েছে কেবল সাব-ক্লাসগুলি যেখানে তাদের সংজ্ঞায়িত করা হয়েছে সেখানেই ওভাররাইড করা যেতে পারে।

  3. ওপেন ক্লাসগুলি যেখানে মডিউলটি সংজ্ঞায়িত করা হয়েছে সেখানে এবং যে কোনও মডিউল যেখানে মডিউলটি সংজ্ঞায়িত করা হয়েছে সেখানে তার মধ্যে সাবক্ল্যাস করা যেতে পারে।

  4. ওপেন ক্লাসের সদস্যদের মডিউল যেখানে তাদের সংজ্ঞায়িত করা হয়েছে এবং যে কোনও মডিউল যেখানে মডিউল যেখানে সংজ্ঞায়িত করা হয়েছে সেখানে আমদানি করে সেগুলি উপশ্রেণী দ্বারা ওভাররাইড করা যায়।

5

ওপেন একটি অ্যাক্সেস স্তর, সুইফটে শ্রেণীর উত্তরাধিকারের সীমাবদ্ধতা আরোপের জন্য চালু হয়েছিল।

এর অর্থ হল ওপেন অ্যাক্সেস স্তরটি কেবল ক্লাস এবং শ্রেণীর সদস্যদের জন্য প্রয়োগ করা যেতে পারে ।

ক্লাসে

ক্লাস সংজ্ঞায়িত মডিউলটিতে এবং মডিউলগুলিতে এটি সংজ্ঞায়িত মডিউলে একটি উন্মুক্ত শ্রেণিকে সাবক্ল্যাস করা যায়।

ক্লাস সদস্যদের মধ্যে

একই শ্রেণীর সদস্যদের জন্য প্রযোজ্য। একটি খোলার পদ্ধতিটি মডিউলটিতে এবং মডিউলগুলিতে যে মডিউলটি পদ্ধতিটি সংজ্ঞায়িত করা হয় তা আমদানি করে এমন মডিউলটিতে সাবক্লাস দ্বারা ওভাররাইড করা যায়।

এই আপডেটের জন্য প্রয়োজন

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

সুতরাং এই সংযোজনের পরে তারা সেই অনুযায়ী সরকারী এবং ব্যক্তিগত অ্যাক্সেসের স্তরগুলি প্রয়োগ করবে।

আরও বিশদের জন্য অ্যাক্সেস নিয়ন্ত্রণে অ্যাপল ডকুমেন্টেশনটি দেখুন at


1

সাবক্লাস ব্যতীত একটি open class funcআপনার প্রকল্পের যে কোনও জায়গা থেকে অ্যাক্সেসযোগ্য। বলুন যে আপনি আপনার উটিল শ্রেণিতে এভাবে একটি ওপেন ক্লাস ফাংশনটি সংজ্ঞায়িত করছেন

open class Utils: NSObject {
    open class func printHello() {
        print("Hello from utils")
    }
}

তারপরে আপনার দেখার নিয়ন্ত্রকদের যেকোন জায়গায় আপনি কল করে এই পদ্ধতিটি অ্যাক্সেস করতে পারবেন

Utils.printHello()

3
আপনি যদি জনসাধারণের সাথেও এটি করতে পারেন তবে এই উত্তরটি জনসাধারণের চেয়ে কীভাবে আলাদা তা ব্যাখ্যা করে না।
জোসে রামিরেজ

এটি সম্পর্কে আরও কিছু ব্যাখ্যা দরকার
এমডি আসলাম আনসারী

1

একাধিক মডিউল নিয়ে কাজ করার সময় খেলতে খুলুন।

ওপেন ক্লাসটি সংজ্ঞায়িত মডিউলটির বাইরে অ্যাক্সেসযোগ্য এবং উপশ্রেণীযোগ্য। একটি উন্মুক্ত শ্রেণীর সদস্য নির্ধারণযোগ্য মডিউলটির বাইরে অ্যাক্সেসযোগ্য এবং ওভাররিডেবল।


0

ওপেন কেবলমাত্র অন্য মডিউলের জন্য উদাহরণস্বরূপ: কোকো পোড বা ইউনিট পরীক্ষা, আমরা উত্তরাধিকারী বা ওভাররাইড করতে পারি

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