Swift হল Apple-এর একটি আধুনিক প্রোগ্রামিং ভাষা, যা WWDC 2014-এ Objective-C-এর প্রতিস্থাপন হিসেবে উপস্থাপিত হয়। Swift নিরাপদ টাইপিং, স্বয়ংক্রিয় মেমোরি ব্যবস্থাপনা ARC (Automatic Reference Counting) এবং প্রোটোকল-ভিত্তিক দৃষ্টিভঙ্গি একত্রিত করে। Swift Programming Language সিনট্যাক্স এবং স্ট্যান্ডার্ড লাইব্রেরির মূল উৎস।
মূল পয়েন্ট
Swift একটি মাল্টি-প্যারাডাইম প্রোগ্রামিং ভাষা যা Apple iOS, macOS, watchOS, tvOS এবং visionOS-এর জন্য তৈরি করেছে। ভাষার মূল লক্ষ্য: নিরাপত্তা, গতি এবং সিনট্যাক্সের প্রকাশক্ষমতা। Swift LLVM কম্পাইলার ব্যবহার করে এবং C++-এর সমতুল্য পারফরম্যান্স সহ অপ্টিমাইজড মেশিন কোড জেনারেট করে।
2014 সালে প্রকাশের পর থেকে Swift 6টি প্রধান সংস্করণ অতিক্রম করেছে। Swift 6 (2024) কনকারেন্ট কোড আইসোলেশনের কঠোর নিয়ন্ত্রণের মাধ্যমে সম্পূর্ণ ডেটা-রেস নিরাপত্তা মডেল চালু করেছে। GitHub Octoverse 2025 অনুসারে, Swift কমিউনিটি বৃদ্ধিতে শীর্ষ ১০টি ভাষার মধ্যে রয়েছে, Apple প্ল্যাটফর্মে গ্রহণের গতিতে Rust এবং Kotlin-কে ছাড়িয়ে গেছে।
Swift ওপেন সোর্স এবং ক্রস-প্ল্যাটফর্ম — সোর্স কোড GitHub-এ (Swift Open Source) প্রকাশিত। Apple প্ল্যাটফর্ম ছাড়াও, Swift Linux এবং Windows-এ সার্ভার-সাইড ডেভেলপমেন্টের (Vapor, Hummingbird) জন্য ব্যবহৃত হয়, যদিও এর প্রধান ক্ষেত্র Apple ইকোসিস্টেমে মোবাইল এবং ডেস্কটপ ডেভেলপমেন্ট।
পরিবর্তনের প্রধান কারণ: Swift Objective-C-তে সম্ভব ত্রুটির সম্পূর্ণ শ্রেণী দূর করে। Type safety কম্পাইলেশন পর্যায়ে টাইপ অমিল প্রতিরোধ করে। Optionals nil ডিরেফারেন্সিং দূর করে। ARC প্রথম দিন থেকে নির্মিত, Objective-C-তে MRC/ARC-এর বিপরীতে। Swift সিনট্যাক্স ছোট এবং আরও পঠনযোগ্য — গবেষণা সমতুল্য কাজের জন্য Objective-C-এর তুলনায় কোডের আয়তন ৩০-৪০% হ্রাস দেখায়।
মৌলিক Swift সিনট্যাক্স পরিচিত C-সদৃশ কাঠামোকে ফাংশনাল ভাষার উপাদানের সাথে একত্রিত করে। ভেরিয়েবল var দিয়ে, ধ্রুবক let দিয়ে ঘোষণা করা হয়। কম্পাইলার type inference ব্যবহার করে, তাই স্পষ্ট টাইপ অ্যানোটেশন শুধুমাত্র অস্পষ্টতায় প্রয়োজন।
import Foundation
// ধ্রুবক এবং ভেরিয়েবল
let name = "Swift"
var version = 6.0
var count: Int = 42
// ডিফল্ট প্যারামিটার সহ ফাংশন
func greet(person: String, greeting: String = "Hello") -> String {
return "\(greeting), \(person)!"
}
// প্রারম্ভিক প্রস্থানের জন্য Guard-let
func parse(input: String?) -> Int {
guard let value = input, let number = Int(value) else {
return 0
}
return number
}Switch এবং প্যাটার্ন ম্যাচিং Swift-এ C এবং Kotlin-এর চেয়ে বেশি শক্তিশালী। Switch টাপল, রেঞ্জ, where শর্ত এবং ভ্যালু বাইন্ডিংয়ের সাথে মিলন সমর্থন করে। কম্পাইলার সমস্ত কেসের ব্যাপক কভারেজ পরীক্ষা করে — ডিফল্টের অনুপস্থিতি ত্রুটি নয় যদি সমস্ত সম্ভাব্য মান কভার করা হয়।
let point = (x: 3, y: -1)
switch point {
case (0, 0):
print("মূলবিন্দু")
case let (x, y) where x == y:
print("X সমান Y")
case let (x, y) where abs(y) > x:
print("Y-এর পরম মান X-এর চেয়ে বড়")
default:
print("বিন্দু \(point.x), \(point.y))"point.x), \(point.y))")
}Optionals Swift-এর একটি কেন্দ্রীয় ধারণা যা টাইপ সিস্টেমের স্তরে null রেফারেন্স সমস্যা সমাধান করে। Optional
var optionalString: String? = "Hello"
optionalString = nil // অনুমোদিত
// Optional Binding — নিরাপদ নিষ্কাশন
if let text = optionalString {
print("টেক্সট: \(text)"text)")
} else {
print("মান অনুপস্থিত")
}
// Optional Chaining — প্রপার্টিতে নিরাপদ অ্যাক্সেস
let length = optionalString?.count ?? 0
// Nil-coalescing অপারেটর
let greeting = optionalString ?? "Default"Optional Chaining অপারেটর ?. দিয়ে অপশনাল মানের প্রপার্টি নিরাপদে অ্যাক্সেস এবং মেথড কল করার অনুমতি দেয়। যদি চেইন nil-এ বাধাপ্রাপ্ত হয়, পুরো এক্সপ্রেশনের ফলাফল nil হয়। Nil-coalescing (??) একটি ডিফল্ট মান প্রদান করে এবং প্লেসহোল্ডার টেক্সট দেখানোর জন্য UI কোডে ব্যাপকভাবে ব্যবহৃত হয়।
প্রোটোকল Swift-এ একটি চুক্তি নির্ধারণ করে — প্রপার্টি এবং মেথডের একটি সেট। Java ইন্টারফেসের বিপরীতে, Swift প্রোটোকলগুলির protocol extensions-এর মাধ্যমে ডিফল্ট বাস্তবায়ন থাকতে পারে। এটি প্রোটোকল-ভিত্তিক প্রোগ্রামিংয়ের ভিত্তি, যা ক্লাস ইনহেরিটেন্সের পরিবর্তে Apple-এর প্রস্তাবিত পদ্ধতি।
protocol NamedEntity {
var name: String { get }
func description() -> String
}
// এক্সটেনশনের মাধ্যমে ডিফল্ট বাস্তবায়ন
extension NamedEntity {
func description() -> String {
return "Entity: \(name)"
}
}
// এক্সটেনশনের মাধ্যমে সঙ্গতি
extension String: NamedEntity {
var name: String { return self }
}Protocol Extensions প্রতিটি অনুগত টাইপ পরিবর্তন না করেই প্রোটোকলে মেথড যোগ করার অনুমতি দেয়। এটি সাধারণ ইউটিলিটি যুক্ত করার জন্য বিশেষভাবে উপযোগী: Sequence-এর জন্য map, filter, reduce, বা JSON সিরিয়ালাইজেশনের জন্য Codable। Apple অনেক ফ্রেমওয়ার্ক (SwiftUI, Combine) এক্সটেনশন সহ প্রোটোকলের উপর তৈরি করেছে।
ক্লোজার (Closures) Swift-এ匿名 ফাংশন যা বাহ্যিক কনটেক্সট থেকে ভেরিয়েবল ক্যাপচার করে। সিনট্যাক্টিকভাবে, ক্লোজার Kotlin-এর lambda-এর মতো তবে আরও নমনীয় সিনট্যাক্স সহ: trailing closure, সংক্ষিপ্ত আর্গুমেন্ট নাম ($0, $1) এবং অটোক্লোজার।
// কনটেক্সট ক্যাপচার সহ ক্লোজার
let numbers = [5, 3, 8, 1, 9]
// Trailing closure syntax
let sorted = numbers.sorted { $0 < $1 }
// ফাংশনাল চেইন
let result = numbers
.filter { $0 > 3 }
.map { $0 * 2 }
.reduce(0, +)
// ফাংশন প্যারামিটার হিসেবে ক্লোজার
func performAsync(completion: @escaping (Result<Data, Error>) -> Void) { }@escaping ক্লোজার ব্যবহার করা হয় যখন ক্লোজার ফাংশন থেকে ফেরত আসার পরে কার্যকর হয় — সাধারণত নেটওয়ার্ক অনুরোধ এবং অ্যাসিনক্রোনাস অপারেশনের জন্য। @autoclosure স্বয়ংক্রিয়ভাবে একটি এক্সপ্রেশনকে ক্লোজারে মোড়ানো করে, যা assert এবং শর্ট-সার্কিট লজিকে ব্যবহৃত হয়।
struct এবং class-এর মধ্যে নির্বাচন Swift মডেল ডিজাইন করার সময় প্রথম সিদ্ধান্তগুলির মধ্যে একটি। Apple ডিফল্টরূপে struct (ভ্যালু-টাইপ) ব্যবহার করার এবং শুধুমাত্র ইনহেরিটেন্স বা রেফারেন্স আইডেন্টিটির প্রয়োজন হলে class (রেফারেন্স-টাইপ)-এ স্যুইচ করার সুপারিশ করে।
| বৈশিষ্ট্য | Struct | Class |
|---|---|---|
| পাস করার প্রকার | মান দ্বারা (কপি) | রেফারেন্স দ্বারা |
| ইনহেরিটেন্স | সমর্থিত নয় | সমর্থিত |
| ARC ব্যবস্থাপনা | প্রয়োজন নেই | ARC (রেফারেন্স গণনা) |
| ডিইনিশিয়ালাইজার deinit | না | হ্যাঁ |
| পরিবর্তনক্ষমতা | প্রপার্টি পরিবর্তনের জন্য mutating func | যে কোনো মেথড পরিবর্তন করতে পারে |
| সংগ্রহে সংরক্ষণ | সন্নিবেশে কপি হয় | রেফারেন্স সংরক্ষিত হয় |
ভ্যালু-টাইপ (struct) মাল্টি-থ্রেডেড পরিবেশে নিরাপদ — প্রতিটি থ্রেড একটি স্বাধীন কপি পায়। রেফারেন্স-টাইপ (class) UIKit (UIView, UIViewController) নিয়ে কাজ করার জন্য প্রয়োজন, যেখানে রেফারেন্স আইডেন্টিটি এবং সিস্টেম ক্লাস থেকে ইনহেরিটেন্স প্রয়োজন।
ARC (Automatic Reference Counting) রেফারেন্স-টাইপের জন্য Swift-এর মেমোরি ব্যবস্থাপনা সিস্টেম। কম্পাইলার রানটাইমে retain/release কল সন্নিবেশ করে, একটি অবজেক্টে শক্তিশালী রেফারেন্সের সংখ্যা ট্র্যাক করে। যখন কাউন্টার শূন্যে পৌঁছায়, অবজেক্টটি তৎক্ষণাৎ মুক্ত হয়।
ARC-এর প্রধান সমস্যা retain cycles (চক্রীয় রেফারেন্স)। যখন দুটি অবজেক্ট একে অপরের উপর শক্তিশালী রেফারেন্স ধারণ করে, মেমোরি কখনো মুক্ত হয় না। সমাধান হল weak রেফারেন্স (মুক্তির সময় স্বয়ংক্রিয়ভাবে nil হয়) এবং unowned রেফারেন্স (নিশ্চিত করে যে অবজেক্ট জীবিত)।
class ProfileViewController: UIViewController {
var onLogout: (() -> Void)?
func setupHandler() {
// [weak self] retain cycle প্রতিরোধ করে
onLogout = { [weak self] in
guard let self else { return }
self.dismiss(animated: true)
}
}
}ক্লোজারে retain cycles প্রতিরোধ করতে, [weak self] ব্যবহার করুন guard let self = self else { return } সহ। এই নিয়ম UIKit-এ বিশেষভাবে গুরুত্বপূর্ণ, যেখানে ViewController তার প্রপার্টিতে শক্তিশালী রেফারেন্স ধারণ করে এবং সেই প্রপার্টির ভিতরের ক্লোজারগুলি ViewController-কে রেফারেন্স করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Swift Int, Double, Float, String, Bool, Array, Set, Dictionary এবং টাপল সমর্থন করে। সংখ্যাসূচক টাইপের নির্দিষ্ট আকার আছে: Int8, Int16, Int32, Int64 এবং স্বাক্ষরবিহীন UInt। তারিখ নিয়ে কাজ করার জন্য Foundation থেকে Date ব্যবহৃত হয়, ডেটার জন্য — Data।
Optional দুটি কেস সহ একটি enum: .none (nil) এবং .some(Wrapped)। Swift-এর if let, guard let বা ??-এর মাধ্যমে স্পষ্ট Optional যাচাই প্রয়োজন, যা NullPointerException দূর করে। অপশনাল চেইন (?.) নেস্টেড অপশনাল মানের প্রপার্টিতে নিরাপদ অ্যাক্সেসের অনুমতি দেয়।
Struct — ভ্যালু-টাইপ, অ্যাসাইনমেন্টে কপি হয়, ইনহেরিটেন্স সমর্থন করে না, ARC প্রয়োজন নেই। Class — রেফারেন্স-টাইপ, রেফারেন্স দ্বারা পাস হয়, ইনহেরিটেন্স এবং ডিইনিশিয়ালাইজার সমর্থন করে। Apple ডিফল্ট টাইপ হিসেবে struct সুপারিশ করে।
ARC স্বয়ংক্রিয়ভাবে ক্লাস অবজেক্টের শক্তিশালী রেফারেন্স গণনা করে। কাউন্টার শূন্য হলে মেমোরি মুক্ত হয়। চক্রীয় রেফারেন্স প্রতিরোধ করতে weak (স্বয়ংক্রিয় nil) এবং unowned (নিশ্চিত জীবনকাল) ব্যবহার করুন। ARC struct এবং enum-এ প্রযোজ্য নয়।
প্রোটোকল-ওরিয়েন্টেড প্রোগ্রামিং একটি পদ্ধতি যা ক্লাস শ্রেণিবিন্যাসের পরিবর্তে এক্সটেনশন সহ প্রোটোকল ব্যবহার করে। প্রোটোকলগুলিতে protocol extensions-এর মাধ্যমে ডিফল্ট মেথড বাস্তবায়ন থাকতে পারে। এটি ইনহেরিটেন্স ছাড়াই কোড পুনর্ব্যবহারের অনুমতি দেয়, নমনীয়তা এবং পরীক্ষাযোগ্যতা বজায় রাখে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন