به نام خدا

یکی از مزایای کارهای گروهی و همچنین انجام کارهای بزرگ کسب تجربه در طول توسعه اپ هست. اپ های بزرگ همیشه به دولوپر ها کمک میکنند تا بیشتر به یادگیری بپردازند. مثلا یه برنامه نویس معمولی در سطح متوسط که کار با RESTful API ها رو بلده و برای خودش برنامه مینویسیه شاید هیچوقت به سمت چیزهای جدید نره و بخواد همیشه در سطح خودش بمونه حتی اگه گاهی هم یه ایده ای به ذهنش برسه که نیاز به دانش بیشتری داشته باشه اون ایده رو اجرایی نکنه یا بخواد اون ایده رو با دانش محدود خودش به جای ۱۰۰ خط کد با ۵۰۰ خط کد اجراش کنه.

اما کار توی یه گروه شما رو ملزم به آشنا بودن با متدهای جدید برنامه نویسی، یادگیری مطالب روز دنیا و... میکنه مثلا وقتی معماری جدید MVVM اومد شما برای اینکه بتونید موقعیت خوبتون رو حفظ کنید باید برید و مباحث رو از سایت های خارجی یادبگیرید گاهی ممکنه خیلی از شما انرژی بگیره چون هیچکس غیرشما توی منطقه ی کاریتون هنوز شروع به یادگیری نکرده.

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

چندروز پیش سویفت ۵ به طور رسمی معرفی شد و من به سرعت توی سایت های خارجی به دنبال قابلیت های اضافه شده به سویفت ۵ بودم و این هم همان ویژگی است که در کارهای گروهی و پروژه های بزرگ به دست می آورید.

وقتی پروسه توسعه برنامه به وسط ها میرسه یا به آخراش نزدیک میشه و لازم میشه یه فیچر جدید اضافه بشه یا یه کار اساسی انجام بشه اون موقع شما متوجه میشید که اگر در اول پروژه فلان کار رو کرده بودید الان خیلی راحت میتونستید فیچر خواسته شده رو پیاده کنید مثلا به آخرای پروژه رسیدید و از شما خواستن که یه بخش تنظیمات برای اپلیکیشن بزارید که کاربر بتونه تم و همچنین فونت رو انتخاب کنه حالا شما میمونید و یه دنیا کد که باید بشینید به بهینه ترین شکل ممکن تغییرشون بدید. کدوم کار بهتره؟ یه فایل سیتیگ بسازم؟ یا...

پس بهتره هرموقع که خواستید پروژه های بزرگ رو شروع کنید یه سری زیرساخت هایی رو در نظر بگیرید تا هرموقع که نیاز شد بتونید خیلی ساده و بدون دردسر فیچر مورد نظر خودتون رو پیاده سازی کنید.

 

پیش نیاز هایی که در پروژه بزرگ بعدی پیاده خواهم کرد:

  • اکستنشن فانکشن برای UIFont به نام appFont و استفاده آن در برنامه نویسی به شکل UIFont.appFont() (توصیه میشه که یه enum هم داشته باشید و اسم فونت یا تایپ فیس رو توش بزارید مثلا رگولار، بولد و... که دیفالت این تابع رگولار هست)
  • اکستنشن فانکشن برای UIColor به نام appColor و استفاده آن در کد به صورت UIColor.appColor()
  • ساخت یک کاستوم ویو به نام RogRadView که سه چهارتا فیلد داره (۱.امکان سایه دادن ۲.گرد کردن گوشه ها ۳. داشتن یه فیلد بولین برای اینکه رنگ اپ کالر رو بگیره یا بکگراند خودش) از این ویو باید همه جا استفاده بشه یعنی هرجا که قرار باشه ویویی داشته باشیم ازش استفاده میشه و اون فیلد بکگراند به طور پیشفرض روی false هست و برای سایه دادن و گرد کردن ازش استفاده میشه هرجاهم لازم شد که از بک گراند اپ کالر استفاده بشه باید فیلد ترو بشه
  • ساخت یه Custom Label که دارای یک فیلد به نام Use App Font است.

 

پاسخ به سوالات احتمالی شما:

۱. چرا باید یه کاستوم ویو برای لیبل ها داشته باشیم؟ چون شما ممکنه بعدا بخواید فونت برنامه رو تغییر بدید یا از اون مهمتر چندین فونت به طور همزمان در برنامه (با قابلیت انتخاب توسط کاربر) استفاده کنید اونموقع دیگه اینکه بخواید همه لیبل ها رو وارد محیط کد کنید و همه رو بهشون فونت بدید و چک کنید که کاربر کدوم فونت رو انتخاب کرده یه چیز بسیار سخت و وحشتناکی میشه

۲. چرا باید کاستوم ویو برای UIView داشته باشیم؟ داشتن یه ویو برای سایه دادن از توی خود interface builder خیلی به کار ما سرعت میبخشه همچنین اگر گرد کردن دور اون ویو هم به صورت یه فیلد تعریف بشه که میتونه به ساخت یو آی هامون سرعت ببخشه اما یه ویژگی مهمش اینه هر موقع خواستید از رنگ اصلی برنامه استفاده کنید یا حتی اگر رنگ بندی برنامه به ۳ شکل است میتونید نام رنگ رو هم از توی یه فیلد استرینگ بهش بدید و اونجا توی ویو چک کنید و در صورت وجود داشتن اون نام، رنگ مورد نظرتون رو بدید مثلا Primary و... اینجوری هرموقع که خواستید تم برنامه رو عوض کنید (یا به انتخاب کاربر تغییر بدید)‌ میتونید خیلی سریع اینکارو انجام بدید

۳. اکستنشن فانکشن UIFont به چه کاری میاد؟ بهتون توصیه میکنم که حتما این فانکشن رو به UIFont اضافه کنید تا از دردسر هربار نوشتن کدش راحت بشید فقط توجه داشته باشید که فونت تایپ و همچنین سایز فونت رو توی تابع دریافت کنید (همونجوری که بالا هم گفتم برای رگولار و ... یه Enum بسازید)

۴. اکستنشن فانکشن UIColor به چه کاری میاد؟ اولا که توی برنامه نویسی هرجا لازم شد رنگ برنامه رو به یک شی بدید دیگه کد hex یا RGB نمیدید بلکه به سادگی اون تابع گفته شده رو صدا میکنید چنانچه این تابعی که مینویسید پارامتری از نوع Enum بگیره که اون Enum چند تا کیس به اسم های مثلا Primary, Main, Second و از این قبیل داشته باشه خیلی بعدا توی توسعه کمک میکنه و شما میتونید سه رنگ مختلف برای برنامه استفاده کنید و در نهایت با تغییر تم، این رنگ ها رو در جا تغییر بدید

 

چند توصیه دوستانه:

  1.  توی  Assets.xcasset حتما از فولدر هایی برای رنگ ها استفاده کنید یعنی یه سری فولدر بسازید و رنگ و تم ها رو جدا کنید (اول کار بهتره یه فولدر به نام main بسازید و بقیه فولدر ها رو توش ایجاد کنید مثل Color و حتما رنگ ها رو از توی همین فایل assets بدید و بعدش یه اینام بسازید که اسم رنگ ها رو که استرینگ هست به ما بده)
  2. روی رنگ ها حساس باشید و رنگ های اصلی رو یه جوری استفاده کنید که بعدا با یه تغییر کد رنگ، روی کل برنامه اعمال بشه