در جلسات قبل در مورد تابع ها و کلژر ها صحبت کردیم و به طور کامل با آن ها آشنا شدیم.
حالا در ادامه جلسات قبل میخواهیم با completion handler در swift آشنا شویم.
بگذارید با یک مثال برایتان این مفهوم را جا بندازم
تصور کنید که قصد دارد از اینترنت فایلی را دانلود کنید (یا کلا یک درخواست به شبکه دارید) طبیعتا این درخواست کمی زمان بر است. و شما نیاز دارید که وقتی درخواست تکمیل شد و جواب را بصورت کامل گرفتید آنگاه در ادامه یک مجموعه کد جدید اجرا شود.
در واقع این مثالی که زدم یک مثال بارز از نیاز ما به completion handler است. به مثال زیر که با کد سوئیفت هست نگاه کنید:
func funcWithCompletionHandler(completion: () -> Void) {
// کدهایی که باید ابتدا انجام شوند
print("Task Started")
// فراخوانی Completion Handler و اجرای دستورات بعدی
completion()
}
که در مثال بالا اول دستورات تابع سوئیفتی اجرا میشود و بعد سراغ دستورات مربوط به Completion Handler میرود
حال برویم سراغ یک مثال دیگر که همراه با ورودی است
func fetchData(completion: (String) -> Void) {
print("Fetching data from internet...")
sleep(2)
let fetchedData = "Sample Data"
print("Data fetched successfully!")
// ارسال داده به Completion Handler
completion(fetchedData)
}
// فراخوانی تابع
fetchData { data in
print("Received data: \(data)")
}
که خروجی کد بالا بصورت زیر است:
Fetching data from internet...
Data fetched successfully!
Received data: Sample Data
توضیحات بیشتر:
Completion Handler یکی از ابزار های کلیدی برای مدیریت عملیات های ناهمزمان است که در بسیاری از پروژههای واقعی کاربرد دارد.