محمد نصرآبادی
محمد نصرآبادی
خواندن ۱ دقیقه·۵ سال پیش

extension on Codable to Swift

امروز می خواهیم با Codable کار کنیم. البته اگه سرچ کوچکی کنیم آموزش‌های فراوانی پیدا میشه پس من هک میخوام بهتون یاد بدم برای افرادی که استفاده از Codable رو بلد هستند.

ما می دانیم که Codable یک پروتکل عالی برای کار با مدل ها و Json در لایه api است.
اما نمی توان بر روی خود Codable یک extension بزنید:

Non-nominal type ‘Codable’ (aka ‘Decodable & Encodable’) cannot be extended
Non-nominal type ‘Codable’ (aka ‘Decodable & Encodable’) cannot be extended


اگه لازم داریم یک متد خاص روی مدل‌ها اعمال باشه باید برای هر مدل، یک extension بزنیم و متد را داخلش copy & pase کنیم که باعث کثیفی کد میشه .
برای هر Codable نیاز به یک extension مجزا دارد:

راه خوب اینه که متدهای مشترک extension بشن ولی چطور Codable رو مجبور کنیم؟؟

راه حل ساده اینه که ما از زبان سوییفت یاد بگیریم

همینطور که شاید بدونیم خود Codable یک ‌‌پروتوکل است و ما میتوانیم پروتوکلی بسازیم که از یک پروتوکل دیگه تشکیل شده

خب پس ما هم با استفاده این روش پروتوکل جدیدی از Codable برای خودمون میسازیم تا کاستی‌ها و محدودیت‌های اصلی رو نداشته باشه :


حالا بجای استفاده از Codable دیفالت از CodablePro استفاده میکنیم:


و روی پروتکل جدید کدهای مشترک رو وارد میکنیم :


میبینیم که حالا User ما تابع جدید رو درون خودش داره بدون اینکه ما دوباره کد اضافی بزنیم

یک CodablePro واقعی و کامل که من در پروژه هام استفاده کنم :

https://gist.github.com/MMnasrabadi/2258f563d7bf027aa624b8cf0ad0f7d7#file-codablepro-swift



سخن آخر:
ما یک CodablePro ساده را پیاده سازی کردیم.
امیدوارم با مفید باشه. همیشه سرچ کنید
اگر مقاله و پروژه را دوست داشتید ❤️ فراموش نکنید که می توانید مرا در ویرگول دنبال کنید.

ممنون از خواندن!

swiftبرنامه‌نویسی
توسعه دهنده‌ی نرم‌افزار تلفن همراه (IOS/Android)
شاید از این پست‌ها خوشتان بیاید