বিভাগের জন্য কীভাবে সুইফ্ট ক্লাস তৈরি করবেন?


84

আমি আমার বিদ্যমান সুইফ্ট ক্লাসের বিভাগ তৈরি করতে চাই, তবে এটি করার জন্য আইডিইতে কোনও বিকল্প নেই।

কোন প্রকল্পটি যদি সুইফ্ট প্রকল্পে বিদ্যমান থাকে? বা সুইফ্ট প্রকল্পে কীভাবে অনুরূপ কার্যকারিতা অর্জন করবেন?


4
এটা বলা extension
হোলএক্স

উত্তর:


128

সুইফ্টে, আপনি Extensionsবিদ্যমান বর্গ, স্ট্রাক্ট এবং গণনার ধরণগুলিতে নতুন কার্যকারিতা যুক্ত করতে ব্যবহার করতে পারেন ।

তারা কয়েকটি উপায়ে উদ্দেশ্যমূলক-সি বিভাগ থেকে পৃথক, মূলত:

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

এটি আজ যেমন দাঁড়িয়েছে, এক্সটেনশনগুলি এটি করতে পারে:

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

এক্সটেনশন ঘোষণার জন্য বেসিক সিনট্যাক্সটি নিম্নরূপ:

extension SomeType {
    // new functionality to add to SomeType goes here
}

সুইফটে এক্সটেনশনগুলি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আরও তথ্যের জন্য অ্যাপলের ডকুমেন্টেশন চেক করুন।


99

উদ্দেশ্য সিতে তাদের বিভাগ বলা হত , তবে সুইফটে তাদেরকে এক্সটেনশন বলা হয় । এই উভয়ের উদ্দেশ্য হ'ল সাবক্ল্যাস তৈরি না করে বিদ্যমান ক্লাসগুলিতে অতিরিক্ত কার্যকারিতা দেওয়া।

আমি ডকুমেন্টেশনে এক্সটেনশানগুলি সম্পর্কে পড়েছি, তবে আমি এই টিউটোরিয়াল ভিডিওটি ( ইউটিউব সংস্করণ , গিথুব উত্স ) না দেখার আগে পর্যন্ত আমার প্রকল্পে কীভাবে একটি ব্যবহার করব তা আমি সত্যিই বুঝতে পারি নি ।

এটি কীভাবে করা যায় তার ভিডিও থেকে নেওয়া একটি সংক্ষিপ্ত বিবরণ এখানে।

আপনার প্রকল্পে একটি সুইফ্ট ফাইল যুক্ত করুন

  • প্রকল্প নেভিগেটরে ডান ক্লিক করুন এবং "নতুন ফাইল ..." চয়ন করুন

  • "সুইফট ফাইল" নির্বাচন করুন

  • কনভেনশন হ'ল ফাইলের নামটি আপনি শ্রেণীর নাম হিসাবে সংরক্ষণ করবেন যা আপনি বর্ধিত করছেন প্লাস ("+" চিহ্ন সহ) আপনি এতে কী করছেন। উদাহরণস্বরূপ, "ইউআইআইমেজ + ক্রপিং"।

এক্সটেনশনের জন্য কোডটি লিখুন

আপনি সদ্য তৈরি নতুন সুইফট ফাইলটি খুলুন।

আপনি যদি প্রসারিত করেন তবে আপনার UIKitপরিবর্তে আমদানি করা উচিত । তারপরে আপনি যে শ্রেণীর নামটি প্রসারিত করতে চান তার আগে কীওয়ার্ডটি ব্যবহার করুন । তারপরে আপনি ক্লাসে নিজের নতুন পদ্ধতি যুক্ত করতে পারেন। (দ্রষ্টব্য, এক্সটেনশনগুলি নতুন পদ্ধতি যুক্ত করার জন্য, বিদ্যমান পদ্ধতিগুলিকে ওভাররাইড না করে - তাই নামটি are)FoundationUIViewextension

ভিডিওতে, উদাহরণটি হ'ল এমন একটি পদ্ধতি যুক্ত করা যা চিত্র থেকে একটি বৃত্ত কাটা এবং এটিকে একটি সীমানা দেয়।

import UIKit

extension UIImage {
    
    func cropToCircleWithBorderColor(color: UIColor, lineWidth: CGFloat) -> UIImage {
        
        // code to create the cropped circle with colored border
        
        return newImage
    }
}

সম্পূর্ণ উদাহরণের জন্য এখানে দেখুন ।

আপনার প্রকল্পের যে কোনও জায়গায় আপনার এক্সটেনশনটি ব্যবহার করুন

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

ভিডিওটির উদাহরণ এখানে ( গিথুবে ):

import UIKit
class ViewController: UIViewController {
                            
    @IBOutlet var imageView : UIImageView = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let img = imageView.image
        imageView.image = img.cropToCircleWithBorderColor(UIColor(red:0.91, green:0.34, blue:0.16, alpha:1.00), lineWidth: 20)
    }
}

পদ্ধতিটি cropToCircleWithBorderColorকোনও স্ট্যান্ডার্ড অংশ নয় UIImage, তবে আপনি দেখতে পাচ্ছেন, এটি যেমন ছিল ঠিক তেমনই ব্যবহৃত হয়।

আরও অধ্যয়নের জন্য:


8

সুইফটে একে এক্সটেনশন বলা হয় ! এটা দেখ


তবে extensionগুলি ভেরিয়েবলগুলি অন্তর্ভুক্ত করতে পারে না, যা জিনিসগুলি সম্পূর্ণ আলাদা করে তোলে।
আরএনএমএস

এমনকি অবজেক্টিভ-সি বিভাগগুলিতেও ভেরিয়েবল (হ্যাক ছাড়া) থাকতে পারে না।
ভ্যালেন্টিন শেরগিন

ওবিজেসি সম্পর্কিত বিষয়গুলি হ্যাক নয়
মলহল

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