Enum Swift-এ একটি টাইপ যা সম্পর্কিত মানের একটি গ্রুপকে একটি নামের অধীনে একত্রিত করে। C এবং Objective-C থেকে ভিন্ন, যেখানে enum শুধুমাত্র পূর্ণসংখ্যা ধ্রুবকের একটি সেট, Swift first-class এনুমারেশন অফার করে যার সাথে associated values, raw values, মেথড এবং প্রোটোকল সমর্থন রয়েছে। Apple, 2026 অনুসারে, enum iOS ডেভেলপমেন্টে টাইপ-নিরাপদ স্টেট মডেলিংয়ের মূল টুলগুলির মধ্যে একটি।
মূল পয়েন্ট
Enum (এনুমারেশন) একটি কাস্টম ডেটা টাইপ যা পারস্পরিক এক্সক্লুসিভ বৈকল্পিকের একটি সীমিত সেটকে একত্রিত করে। Swift-এ, enum শুধুমাত্র সংখ্যাসূচক ধ্রুবক নয়, বরং নিজস্ব লজিক সহ একটি পূর্ণাঙ্গ টাইপ।
এনুমারেশনের প্রতিটি বৈকল্পিককে কেস বলা হয়। Objective-C থেকে ভিন্ন, যেখানে enum একটি পূর্ণসংখ্যা টাইপে সীমাবদ্ধ, Swift প্রতিটি কেসকে নিজস্ব ডেটা সংরক্ষণ এবং মেথড রাখার অনুমতি দেয়।
Apple অনুসারে, Swift-এ enum জেনেরিক্স, ইনিশিয়ালাইজার, গণনাকৃত প্রপার্টি এবং প্রোটোকল বাস্তবায়ন সমর্থন করে — যা এটিকে স্টেট, ত্রুটি, অপশন এবং সসীম স্টেট মেশিন মডেলিংয়ের জন্য প্রযোজ্য করে তোলে।
Enum ব্যবহার করুন যেখানে আপনাকে পারস্পরিক এক্সক্লুসিভ বৈকল্পিকের সীমিত সেট উপস্থাপন করতে হবে: স্ক্রিন স্টেট, ত্রুটির টাইপ, দিকনির্দেশ, ফিল্টারিং অপশন।
Enum কীওয়ার্ড enum দিয়ে ঘোষিত হয়, তারপরে নাম এবং কার্লি ব্রেসে বডি থাকে।
enum CompassDirection {
case north
case south
case east
case west
}
কেস একটি লাইনে কমা দিয়ে আলাদা করে ঘোষণা করা যেতে পারে:
enum Planet {
case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}
কেস অ্যাক্সেস করতে পরিচিত টাইপের পরে ডট সিনট্যাক্স ব্যবহার করুন:
let direction = CompassDirection.north
// টাইপ জানা আছে — সংক্ষিপ্ত সিনট্যাক্স উপলব্ধ:
var currentPlanet = .earth
একবার ভেরিয়েবলে পরিচিত enum টাইপ নির্ধারিত হলে, Swift স্বয়ংক্রিয়ভাবে টাইপ অনুমান করে, এবং কেস অ্যাক্সেস করার সময় এনুমারেশনের নাম বাদ দেওয়া যায়।
Raw Values হল একই টাইপের মান যা প্রতিটি enum কেসে নির্ধারিত হয়। Associated values থেকে ভিন্ন, raw values সব কেসের জন্য টাইপে একই এবং ঘোষণার সময় নির্ধারিত হয়।
enum HTTPStatusCode: Int {
case ok = 200
case notFound = 404
case internalServerError = 500
}
let code = HTTPStatusCode.notFound
print(code.rawValue) // 404
পূর্ণসংখ্যা raw values-এর জন্য, 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 থেকে ডেটা পার্স করার জন্য সুবিধাজনক।
Associated Values প্রতিটি enum কেসে পৃথকভাবে বিভিন্ন ডেটা টাইপ সংযুক্ত করার অনুমতি দেয়। Raw values থেকে ভিন্ন, associated values টাইপ এবং পরিমাণে ভিন্ন হতে পারে।
enum NetworkError {
case timeout(seconds: Int)
case httpError(code: Int, message: String)
case noConnection
case unknown(error: Error)
}
Switch দিয়ে প্রক্রিয়াকরণের সময়, associated values ভেরিয়েবল বা কনস্ট্যান্টে বাইন্ডিংয়ের মাধ্যমে বের করা হয়:
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 — একটি এনুমারেশন যার কেস নিজেই enum টাইপকে রেফারেন্স করে। এই ধরনের কেস কীওয়ার্ড indirect দিয়ে চিহ্নিত করা হয়।
indirect enum LinkedList<T> {
case empty
case node(value: T, next: LinkedList<T>)
}
indirect এর আগে enum ব্যবহার করলে সব কেস রিকার্সিভ হিসেবে চিহ্নিত হয়। বিকল্পভাবে, শুধুমাত্র নির্দিষ্ট কেস indirect দিয়ে চিহ্নিত করা যেতে পারে:
enum ArithmeticExpression {
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
Swift রিকার্সিভ কেসকে মানের পরিবর্তে রেফারেন্স (reference semantics) হিসেবে সংরক্ষণ করতে indirect ব্যবহার করে — এটি স্ট্যাকে enum-এর অসীম আকার এড়ায়। ট্রি, লিঙ্কড লিস্ট এবং AST তৈরিতে রিকার্সিভ enum ব্যাপকভাবে ব্যবহৃত হয়।
Enum স্ট্রাকচার এবং ক্লাসের মতোই প্রোটোকল বাস্তবায়ন করতে পারে। এটি 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 অ্যাপ্লিকেশনগুলিতে একটি বহুমুখী বিল্ডিং ব্লক করে তোলে।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Enum পারস্পরিক এক্সক্লুসিভ বৈকল্পিকের সীমিত সেট সহ একটি টাইপ, যেখানে struct বৈশিষ্ট্যের একটি ইচ্ছামত সেট সহ একটি টাইপ। Enum-এ stored properties থাকতে পারে না, কিন্তু computed properties এবং মেথড সমর্থন করে।
না, enum-এ একই সময়ে raw values এবং associated values উভয়ই থাকতে পারে না। Raw values সব কেসের জন্য একই টাইপের মান, associated_values প্রতিটি কেসের জন্য পৃথক ডেটা। এই প্রক্রিয়াগুলি পারস্পরিক এক্সক্লুসিভ।
CaseIterable প্রোটোকল কনফর্মেন্স যোগ করুন। Swift স্বয়ংক্রিয়ভাবে allCases প্রপার্টি জেনারেট করবে, যা ঘোষণা ক্রমে সব কেসের একটি সংগ্রহ ফিরিয়ে দেয়। এটি সব বৈকল্পিকের উপর ইটারেশন করার জন্য সুবিধাজনক।
Switch সবচেয়ে নিরাপদ উপায় কারণ কম্পাইলার সব কেস পরীক্ষা করে। একটি কেস চেক করার জন্য if case বা associated values ছাড়া enum-এর জন্য == ব্যবহার করা যেতে পারে।
হ্যাঁ, enum জেনেরিক সমর্থন করে: enum Result<T, E> { case success(T); case failure(E) }। এটি সাফল্য এবং ত্রুটি হ্যান্ডেল করার জন্য টাইপ-নিরাপদ জেনেরিক নির্মাণ তৈরি করতে দেয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন