Swift-এ Enum — এটি কী, সিনট্যাক্স এবং ব্যবহার

লেখক: IT Sectr প্রকাশিত: 2026-06-17 পড়ার সময়: 6 মিনিট

Enum Swift-এ একটি টাইপ যা সম্পর্কিত মানের একটি গ্রুপকে একটি নামের অধীনে একত্রিত করে। C এবং Objective-C থেকে ভিন্ন, যেখানে enum শুধুমাত্র পূর্ণসংখ্যা ধ্রুবকের একটি সেট, Swift first-class এনুমারেশন অফার করে যার সাথে associated values, raw values, মেথড এবং প্রোটোকল সমর্থন রয়েছে। Apple, 2026 অনুসারে, enum iOS ডেভেলপমেন্টে টাইপ-নিরাপদ স্টেট মডেলিংয়ের মূল টুলগুলির মধ্যে একটি।

মূল পয়েন্ট

  • Enum — সম্পর্কিত মানের গ্রুপের জন্য একটি টাইপ, টাইপ নিরাপত্তা নিশ্চিত করে
  • Raw Values — সব এনাম কেসের জন্য একই টাইপের মান নির্ধারিত
  • Associated Values — প্রতিটি কেসের সাথে পৃথকভাবে সংযুক্ত বিভিন্ন ডেটা টাইপ
  • কেস case কীওয়ার্ড দিয়ে ঘোষিত হয় এবং মেথড থাকতে পারে
  • Switch enum-এর সাথে কম্পাইলার দ্বারা সব বৈকল্পিকের বাধ্যতামূলক পরীক্ষা প্রয়োজন

Swift-এ Enum কী?

Enum (এনুমারেশন) একটি কাস্টম ডেটা টাইপ যা পারস্পরিক এক্সক্লুসিভ বৈকল্পিকের একটি সীমিত সেটকে একত্রিত করে। Swift-এ, enum শুধুমাত্র সংখ্যাসূচক ধ্রুবক নয়, বরং নিজস্ব লজিক সহ একটি পূর্ণাঙ্গ টাইপ।

এনুমারেশনের প্রতিটি বৈকল্পিককে কেস বলা হয়। Objective-C থেকে ভিন্ন, যেখানে enum একটি পূর্ণসংখ্যা টাইপে সীমাবদ্ধ, Swift প্রতিটি কেসকে নিজস্ব ডেটা সংরক্ষণ এবং মেথড রাখার অনুমতি দেয়।

Apple অনুসারে, Swift-এ enum জেনেরিক্স, ইনিশিয়ালাইজার, গণনাকৃত প্রপার্টি এবং প্রোটোকল বাস্তবায়ন সমর্থন করে — যা এটিকে স্টেট, ত্রুটি, অপশন এবং সসীম স্টেট মেশিন মডেলিংয়ের জন্য প্রযোজ্য করে তোলে।

Enum ব্যবহার করুন যেখানে আপনাকে পারস্পরিক এক্সক্লুসিভ বৈকল্পিকের সীমিত সেট উপস্থাপন করতে হবে: স্ক্রিন স্টেট, ত্রুটির টাইপ, দিকনির্দেশ, ফিল্টারিং অপশন।

Enum ঘোষণার সিনট্যাক্স

Enum কীওয়ার্ড enum দিয়ে ঘোষিত হয়, তারপরে নাম এবং কার্লি ব্রেসে বডি থাকে।

swift
enum CompassDirection {
    case north
    case south
    case east
    case west
}

কেস একটি লাইনে কমা দিয়ে আলাদা করে ঘোষণা করা যেতে পারে:

swift
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

কেস অ্যাক্সেস করতে পরিচিত টাইপের পরে ডট সিনট্যাক্স ব্যবহার করুন:

swift
let direction = CompassDirection.north
// টাইপ জানা আছে — সংক্ষিপ্ত সিনট্যাক্স উপলব্ধ:
var currentPlanet = .earth

একবার ভেরিয়েবলে পরিচিত enum টাইপ নির্ধারিত হলে, Swift স্বয়ংক্রিয়ভাবে টাইপ অনুমান করে, এবং কেস অ্যাক্সেস করার সময় এনুমারেশনের নাম বাদ দেওয়া যায়।

এনুমারেশনে Raw Values

Raw Values হল একই টাইপের মান যা প্রতিটি enum কেসে নির্ধারিত হয়। Associated values থেকে ভিন্ন, raw values সব কেসের জন্য টাইপে একই এবং ঘোষণার সময় নির্ধারিত হয়।

swift
enum HTTPStatusCode: Int {
    case ok = 200
    case notFound = 404
    case internalServerError = 500
}

let code = HTTPStatusCode.notFound
print(code.rawValue) // 404

পূর্ণসংখ্যা raw values-এর জন্য, Swift স্বয়ংক্রিয়ভাবে মান বাড়ায় যদি শুধুমাত্র প্রথমটি স্পষ্টভাবে সেট করা থাকে:

swift
enum Status: Int {
    case pending = 1
    case active      // 2
    case completed   // 3
}

Raw values Int, String, Character টাইপ বা RawRepresentable প্রোটোকল মেনে চলা যেকোনো টাইপের হতে পারে। Swift স্বয়ংক্রিয়ভাবে raw value থেকে enum তৈরি করার জন্য ইনিশিয়ালাইজার init? জেনারেট করে — যা API থেকে ডেটা পার্স করার জন্য সুবিধাজনক।

Enum-এ Associated Values

Associated Values প্রতিটি enum কেসে পৃথকভাবে বিভিন্ন ডেটা টাইপ সংযুক্ত করার অনুমতি দেয়। Raw values থেকে ভিন্ন, associated values টাইপ এবং পরিমাণে ভিন্ন হতে পারে।

swift
enum NetworkError {
    case timeout(seconds: Int)
    case httpError(code: Int, message: String)
    case noConnection
    case unknown(error: Error)
}

Switch দিয়ে প্রক্রিয়াকরণের সময়, associated values ভেরিয়েবল বা কনস্ট্যান্টে বাইন্ডিংয়ের মাধ্যমে বের করা হয়:

swift
let error = NetworkError.httpError(code: 403, message: "Forbidden")

switch error {
case .timeout(let seconds):
    print("\(seconds)s সেকেন্ড পরে টাইমআউট")
case .httpError(let code, let message):
    print("HTTP \(code): \(message)")
case .noConnection:
    print("কোনো সংযোগ নেই")
case .unknown(let err):
    print("অজানা: \(err.localizedDescription)")
}

Apple ডকুমেন্টেশন অনুসারে, associated_values enum কে পৃথক র্যাপার টাইপ তৈরি না করেই জটিল স্টেট মডেলিংয়ের জন্য একটি অভিব্যক্তিপূর্ণ টুল করে তোলে। Result-সদৃশ পরিস্থিতি এবং প্রসঙ্গসহ ত্রুটি মডেলিংয়ের জন্য এগুলি ব্যবহার করুন।

রিকার্সিভ Enum (indirect)

রিকার্সিভ Enum — একটি এনুমারেশন যার কেস নিজেই enum টাইপকে রেফারেন্স করে। এই ধরনের কেস কীওয়ার্ড indirect দিয়ে চিহ্নিত করা হয়।

swift
indirect enum LinkedList<T> {
    case empty
    case node(value: T, next: LinkedList<T>)
}

indirect এর আগে enum ব্যবহার করলে সব কেস রিকার্সিভ হিসেবে চিহ্নিত হয়। বিকল্পভাবে, শুধুমাত্র নির্দিষ্ট কেস indirect দিয়ে চিহ্নিত করা যেতে পারে:

swift
enum ArithmeticExpression {
    case number(Int)
    indirect case addition(ArithmeticExpression, ArithmeticExpression)
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

Swift রিকার্সিভ কেসকে মানের পরিবর্তে রেফারেন্স (reference semantics) হিসেবে সংরক্ষণ করতে indirect ব্যবহার করে — এটি স্ট্যাকে enum-এর অসীম আকার এড়ায়। ট্রি, লিঙ্কড লিস্ট এবং AST তৈরিতে রিকার্সিভ enum ব্যাপকভাবে ব্যবহৃত হয়।

Enum এবং প্রোটোকল

Enum স্ট্রাকচার এবং ক্লাসের মতোই প্রোটোকল বাস্তবায়ন করতে পারে। এটি Swift-এ প্রোটোকল-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি মূল ক্ষমতা।

swift
protocol Describable {
    var description: String { get }
}

enum PaymentMethod: Describable {
    case creditCard(last4: String)
    case applePay
    case bankTransfer

    var description: String {
        switch self {
        case .creditCard(let last4):
            return "Card ending in \(last4)"
        case .applePay:
            return "Apple Pay"
        case .bankTransfer:
            return "Bank Transfer"
        }
    }
}

Enum Cocoa প্রোটোকলও বাস্তবায়ন করতে পারে — উদাহরণস্বরূপ, CaseIterable সব কেসের সংগ্রহ স্বয়ংক্রিয়ভাবে জেনারেট করার জন্য, বা Codable সিরিয়ালাইজেশনের জন্য। এটি enum-কে Swift অ্যাপ্লিকেশনগুলিতে একটি বহুমুখী বিল্ডিং ব্লক করে তোলে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Swift-এ enum এবং struct-এর মধ্যে পার্থক্য কী?

Enum পারস্পরিক এক্সক্লুসিভ বৈকল্পিকের সীমিত সেট সহ একটি টাইপ, যেখানে struct বৈশিষ্ট্যের একটি ইচ্ছামত সেট সহ একটি টাইপ। Enum-এ stored properties থাকতে পারে না, কিন্তু computed properties এবং মেথড সমর্থন করে।

একই সময়ে enum-এ কি raw values এবং associated values উভয়ই থাকতে পারে?

না, enum-এ একই সময়ে raw values এবং associated values উভয়ই থাকতে পারে না। Raw values সব কেসের জন্য একই টাইপের মান, associated_values প্রতিটি কেসের জন্য পৃথক ডেটা। এই প্রক্রিয়াগুলি পারস্পরিক এক্সক্লুসিভ।

কিভাবে enum-এর সব কেসের একটি অ্যারে পেতে পারি?

CaseIterable প্রোটোকল কনফর্মেন্স যোগ করুন। Swift স্বয়ংক্রিয়ভাবে allCases প্রপার্টি জেনারেট করবে, যা ঘোষণা ক্রমে সব কেসের একটি সংগ্রহ ফিরিয়ে দেয়। এটি সব বৈকল্পিকের উপর ইটারেশন করার জন্য সুবিধাজনক।

enum প্রক্রিয়া করার জন্য কি switch ব্যবহার করা বাধ্যতামূলক?

Switch সবচেয়ে নিরাপদ উপায় কারণ কম্পাইলার সব কেস পরীক্ষা করে। একটি কেস চেক করার জন্য if case বা associated values ছাড়া enum-এর জন্য == ব্যবহার করা যেতে পারে।

জেনেরিক সহ কি enum তৈরি করা যায়?

হ্যাঁ, enum জেনেরিক সমর্থন করে: enum Result<T, E> { case success(T); case failure(E) }। এটি সাফল্য এবং ত্রুটি হ্যান্ডেল করার জন্য টাইপ-নিরাপদ জেনেরিক নির্মাণ তৈরি করতে দেয়।

সারসংক্ষেপ

  • Enum Swift-এ মেথড, জেনেরিক এবং প্রোটোকল সমর্থন সহ একটি পূর্ণাঙ্গ টাইপ
  • Raw Values সব কেসের জন্য একই টাইপের মান নির্ধারণের অনুমতি দেয়
  • Associated Values প্রতিটি কেসে বিভিন্ন ডেটা সংযুক্ত করার ক্ষমতা দেয়
  • Indirect কেস enum-এ রিকার্সিভ স্ট্রাকচারের জন্য প্রয়োজনীয়
  • প্রোটোকল enum দ্বারা বাস্তবায়িত হতে পারে — এটি Swift-এ POP-এর ভিত্তি
  • Switch enum-এর সাথে কম্পাইল টাইমে সব কেসের পূর্ণ পরীক্ষা নিশ্চিত করে
  • সীমিত স্টেট এবং টাইপ-নিরাপদ অপশন মডেলিংয়ের জন্য enum ব্যবহার করুন

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন