Associated Values — একটি Swift প্রক্রিয়া যা প্রতিটি enum কেসে পৃথকভাবে নির্বিচারে ডেটা সংযুক্ত করতে দেয়। raw values-এর বিপরীতে, যেখানে সমস্ত কেসের একই ধরণের মান থাকে, associated values প্রতিটি কেসের জন্য প্রকার এবং পরিমাণে ভিন্ন হতে পারে। Apple Documentation, 2026 অনুসারে, অতিরিক্ত র্যাপার টাইপ তৈরি না করে ডোমেন সঠিকভাবে মডেল করার জন্য এটি একটি মূল ক্ষমতা।
মূল পয়েন্ট
Associated Values হল অতিরিক্ত তথ্য যা একটি enum কেস নিজের সাথে সংরক্ষণ করতে পারে। raw values-এর বিপরীতে, যা ঘোষণা স্তরে স্থির, associated values enum ইনস্ট্যান্স তৈরি করার সময় সেট করা হয়।
একটি পেমেন্ট পদ্ধতি মডেল করার কল্পনা করুন: creditCard কেস শেষ 4টি সংখ্যা এবং মেয়াদ শেষ হওয়ার তারিখ সংরক্ষণ করতে পারে, যেখানে applePay কেস কিছুই সংরক্ষণ করে না। associated values-এর সাথে, এটি সাবক্লাস বা ঐচ্ছিক ফিল্ড ছাড়াই স্বাভাবিকভাবে বাস্তবায়িত হয়।
Apple ডকুমেন্টেশন অনুসারে, associated values enum-কে ধ্রুবকের একটি সাধারণ সেট থেকে একটি বীজগাণিতিক ডেটা টাইপে (sum type) রূপান্তরিত করে, যা ফাংশনাল ভাষার বৈশিষ্ট্য। এটি কোডের অভিব্যক্তিকে উল্লেখযোগ্যভাবে বাড়িয়ে তোলে।
Associated Values কেসের পরে বন্ধনীর মধ্যে ঘোষণা করা হয়, ফাংশনের মতো প্যারামিটারের নাম এবং প্রকার উল্লেখ করে।
enum MediaFile {
case image(width: Int, height: Int, format: String)
case video(duration: Double, codec: String)
case audio(bitrate: Int)
case unknown
}
একটি ইনস্ট্যান্স তৈরি করার সময়, associated values আর্গুমেন্ট হিসাবে পাস করা হয়:
let photo = MediaFile.image(width: 1920, height: 1080, format: "jpeg")
let clip = MediaFile.video(duration: 120.5, codec: "h264")
Swift associated values-এর সংখ্যা বা প্রকারের উপর কোনও বিধিনিষেধ আরোপ করে না। আপনি associated values-এর ভিতরে জেনেরিক, ক্লোজার ফাংশন এবং অন্যান্য enum ব্যবহার করতে পারেন। এটি জটিল নেস্টেড স্ট্রাকচার তৈরি করা সম্ভব করে।
associated values-এর প্যারামিটারের নামগুলি ইনস্ট্যান্স তৈরি করার সময় আর্গুমেন্ট লেবেল হিসাবে ব্যবহৃত হয় — এটি কোড পঠনযোগ্যতা উন্নত করে। switch-এর মাধ্যমে নিষ্কাশনের সময়, নামগুলি ডকুমেন্টেশন হিসাবে কাজ করে, প্রতিটি মানের অর্থ স্পষ্ট করে। এই পদ্ধতি কোডকে স্ব-ডকুমেন্টিং করে তোলে এবং ডেটা ম্যাচ করার সময় ত্রুটির সম্ভাবনা হ্রাস করে। এটি বড় iOS অ্যাপ্লিকেশনের টিম ডেভেলপমেন্টে বিশেষভাবে মূল্যবান।
Switch হল associated values নিষ্কাশনের প্রাথমিক উপায়। মানগুলি let বা var-এর মাধ্যমে ধ্রুবক বা ভেরিয়েবলের সাথে আবদ্ধ হয়।
func describe(_ file: MediaFile) -> String {
switch file {
case .image(let w, let h, let fmt):
return "Image \(w)x\(h) .\(fmt)"
case .video(let duration, let codec):
return "Video \(duration)s, \(codec)"
case .audio(let bitrate):
return "Audio \(bitrate)kbps"
case .unknown:
return "Unknown format"
}
}
Swift আংশিক ম্যাচিং সমর্থন করে — আপনি associated values-এর জন্য নির্দিষ্ট মান নির্ধারণ করতে পারেন:
switch file {
case .image(let w, let h, "png"):
print("PNG চিত্র \(w)x\(h)")
case .image(1920, 1080, _):
print("Full HD চিত্র")
default:
break
}
ওয়াইল্ডকার্ড (_) ব্যবহার অপ্রয়োজনীয় associated values উপেক্ষা করতে দেয়, এবং কেসের ধ্রুবকগুলি আপনাকে নির্দিষ্ট মানের সাথে মিল পরীক্ষা করতে দেয়।
অনেক শিক্ষানবিশ ডেভেলপার associated values কে raw values-এর সাথে গুলিয়ে ফেলেন। এগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে ভিন্ন প্রক্রিয়া।
| বৈশিষ্ট্য | Raw Values | Associated Values |
|---|---|---|
| ডেটা টাইপ | সমস্ত কেসের জন্য একটি টাইপ | প্রতিটি কেসের জন্য ভিন্ন টাইপ |
| নির্ধারণের সময় | enum ঘোষণার সময় | ইনস্ট্যান্স তৈরির সময় |
| বাধ্যতামূলক | সমস্ত কেসের একটি মান আছে | কিছু কেসের মান নাও থাকতে পারে |
| সামঞ্জস্যতা | পারস্পরিক বর্জনীয় — একসাথে ব্যবহার করা যাবে না | |
Swift Evolution অনুসারে, associated values Swift 2.0-এ enum রিডিজাইনের অংশ হিসাবে চালু করা হয়েছিল। তারা টাইপের জন্য একটি বীজগাণিতিক পদ্ধতি প্রদান করে, যেখানে প্রতিটি কেস তার নিজস্ব স্বাক্ষর সহ একটি পৃথক কনস্ট্রাক্টর।
Associated Values বাস্তব iOS প্রকল্পে সক্রিয়ভাবে ব্যবহৃত হয়। আসুন তিনটি সাধারণ পরিস্থিতি বিবেচনা করি।
enum APIResponse<T: Codable> {
case success(data: T, cached: Bool)
case failure(error: Error, retryAvailable: Bool)
case loading(progress: Double)
}
enum ViewState<T> {
case idle
case loading(message: String)
case loaded(data: T)
case error(message: String, retryAction: () -> Void)
}
associated values-এর সাথে, enum স্টেট মেশিনের জন্য একটি শক্তিশালী টুল হয়ে ওঠে: প্রতিটি কেস একটি অবস্থা, associated values হল সেই অবস্থার প্যারামিটার। কম্পাইলার গ্যারান্টি দেয় যে সমস্ত ট্রানজিশন হ্যান্ডেল করা হয়েছে।
switch ছাড়া একটি একক কেস পরীক্ষা করতে, if case বা guard case ব্যবহার করুন। যখন আপনার শুধুমাত্র একটি বিকল্প হ্যান্ডেল করার প্রয়োজন হয় তখন এটি আরও কমপ্যাক্ট।
let error = NetworkError.timeout(seconds: 30)
if case .timeout(let seconds) = error {
print("\(seconds)s পরে অনুরোধের সময় শেষ")
}
guard case .httpError(let code, _) = error else {
return
}
print("\(code) কোড সহ HTTP ত্রুটি")
সচরাচর জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, একটি কেসের associated values নাও থাকতে পারে — উদাহরণস্বরূপ, case unknown। এই ধরনের কেস অতিরিক্ত ডেটা ছাড়া সাধারণ enum কেসের মতো আচরণ করে। এটি মার্কার অবস্থার জন্য সুবিধাজনক।
Swift associated values সহ enum-এর জন্য স্বয়ংক্রিয়ভাবে Equatable জেনারেট করে না (Swift 4.2+ এর আগে)। স্পষ্ট Equatable বাস্তবায়ন যোগ করুন বা প্রতিটি কেস ক্রমানুসারে তুলনা করতে switch ব্যবহার করুন।
হ্যাঁ, indirect enum-এ associated values ট্রি এবং লিঙ্কড লিস্ট তৈরির একটি মানক কৌশল। একটি কেসে indirect চিহ্নিত একই টাইপের associated value থাকতে পারে।
Associated Values টাইপ-নিরাপদ — প্রতিটি কেস গ্যারান্টিযুক্ত যে শুধুমাত্র তার নিজস্ব ডেটা আছে। ঐচ্ছিক বৈশিষ্ট্য সহ struct-এ, প্রতিটি ইনস্ট্যান্সে সমস্ত ফিল্ড থাকে এবং রানটাইম nil চেক প্রয়োজন।
Swift associated values সহ enum-এর জন্য স্বয়ংক্রিয়ভাবে Codable জেনারেট করে না। কাস্টম কোডিং কী ব্যবহার করে কেসের উপর switch-এর মাধ্যমে encode এবং decode-এর ম্যানুয়াল বাস্তবায়ন প্রয়োজন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন