+1 امتیاز
قبل در برنامه نویسی توسط (982 امتیاز)
برچسب گذاری دوباره قبل توسط
آیا برای یک توسعه دهنده ی IOS یادگیری Swift کفایت میکند؟ یا نیاز به یادگیری Objective-C هم وجود دارد؟

3 پاسخ

+2 امتیاز
قبل توسط (35 امتیاز)
ویرایش شده قبل توسط
 
بهترین پاسخ

جواب سریع: بله کافیه.

جواب طولانی: خیر،

Swift مفاهیم جدیدی از برنامه‌نویسی رو داخل خودش داره از جمله Pattern Matching، Protocol Oriented و همچنین در داخل Swift قابلیت استفاده از GenericType وجود داره در حالی که obj-c هیچ‌یک از این قابلیت‌هارو نداره. شاید بنظر بیاد که خب پس اگر زبونی که قابلیت‌های بیشتری و مفاهیم بیشتری داره یادگرفتنش بهتر باشه، اما این درست نیست. Swift با کمک یک Wrapper داره با Cocoa و CocoaTouch صحبت میکنه که اون Wrapper از Objective-c رد میشه، و دنیای Objective-c با دنیای Swift خیلی فرق داره.

به عنوان مثال:

۱. Swift TypeSafe هست، ولی Objective-c محدود به تایپ نیست، به همین جهت اگر دارید با کتابخونه‌ای که با obj-c نوشته شده کار میکنید، اگر براتون مهمه، باید حتما چک کنید تایپ‌ها nil نباشند حتی اگر به صورت غیر optional تعریف شده باشند.

۲. مفاهیمی مثل method dispatching. داخل Swift تعریف توابع با توجع به مدل تعریف شدنشان، ممکن است dynamic یا static باشند که کلی تفاوت ایجاد می‌کنه، اما تو obj-c همه method call ها dynamic هستند و تو runtime انجام میشنود. عدم دقت به این قضیه میتونه باعث ایجاد race در thread های مختلف بشه.

۳. Ownership. در داخل obj-c توابعی هستند، که می‌توانید در runtime مقادیری رو به کلاس اضافه کنید یا حذف کنید (دقت کنید این با extension در Swift و Category در obj-c تفاوت دارد) و استفاده سرسری از این قابلیت بدون اطلاع از داخل obj-c ممکن است باعث ایجاد memoryLeak بشه.

۴. ABI. اگر قصد دارید کتابخونه‌ای بنویسید که openSource نباشد و بقیه استفاده کنند، نوشتن این کتابخونه با  Swift اصلا ایده خوبی نیست، چون Swift هنوز از نظر ABI، Stable نیست و قرار شده که در Swift5 (قرار بود در Swift4.1 این مساله حل بشه که عقب افتاد) این مشکل برطرف بشه. تا قبل از اون، باید این کتابخونه رو با obj-c نوشت، و یک wrapper با Swift در اختیار بقیه قرار داد.

۵. Errors & Exceptions: در داخل Obj-c اکثر توابع با error به عنوان آخرین پارامتر تابع یا callback مشکل رو برمی‌گردوند اما در داخل  Swift اگر از همین syntax استفاده شده باشه، به صورت پیش‌فرض تبدیل می‌شوند به throwrable. اما اگر از کتابخونه‌ای استفاده میکنید که از این syntax استفاده نکرده (مثل SDWebImage) باید این طریقه error handling رو بلد باشید.

۶.IMP: در داخل obj-c این قابلیت رو دارید که تو runtime، پیاده‌سازی یک تابع رو عوض کنید یا دستکاری کنید. اما در Swift باز این قابلیت به علت Type-Safe  بودن و Static بودن اکثر method call ها وجود ندارد و خیلی از کتابخونه‌ها از این تکنیک استفاده میکنند. مانند GoogleAnalytics، Fabric_Crashlytics، IQKeyboardManager و ... . از همینرو گاهی اوقات ممکن است کدی که زدید کاری که انتظار دارید رو انجام ندهند، برای همین اطلاع از این مسائل خوب است.

 

در نهایت ممکن است این سوال پیش بیاد که با Swift نرم‌افزار رو توسعه بدیم یا obj-c؟

جواب به این سوال به خود شما بستگی داره، اکثر شرکت‌ها migrate کردن به Swift اما هنوز قسمت‌هایی از کد که LegacyCode هستش رو با obj-c نگه داشتند. اما تقریبا همه موارد بالا رو چون Wrapper ای که خود اپل برای obj-c نوشته، میشه در Swift استفاده کرد. می‌توان کل پروژه رو با Swift زد. اما برخی از مطالب که ذکر نکردم (مثل UIApperance) برای استفاده پیشرفته فقط در obj-c قابل استفاده هستند.

قبل توسط (982 امتیاز)
ممنون از پاسخ کاملتون.
+2 امتیاز
قبل توسط (20 امتیاز)
ویرایش شده قبل توسط

بله کافیه.
در هر 2 صورت شما از فریمورک iOS استفاده میکنین که توابع و مواردی که استفاده میکنین کاملا یکیه. تنها تفاوت توی syntax ـ Swift و Obj-C هست که اونم وقتی دنبال جواب یه سوال هستین به دردتون میخوره و با خوندن 2 تا جواب ـ Obj-C توی Stackoverflow و مقایسه اون با نسخه Swift ـش کامل یادش میگیرین.
در کل لازم نیست هیچ وقتی روی Obj-C بزارین. همون Swift رو یاد بگیرین کامل.

+2 امتیاز
قبل توسط (20 امتیاز)
ویرایش شده قبل توسط

من به صورت اتفاقی این سوال رو تو لیکدین خودم دیدم.

جواب شما به صورت ساده خیر هست. کفایت نمیکنه. خیلی بستگی به پروژه ای داره که روش کار میکنید. من در حال حاضر روی پروژه به سه زبان C++ , Objective-c , Swift کد میزنم.

ادغام C++ و Swift نمیگم ممکن نیست ولی خیلی سخت هست و چند برابر از شما وقت میگیره ولی من با Objective-C در چند دقیقه این کار انجام میدم.

فقط برای اینکه ایده ای داشته باشید این لینک را ببینید.

اینکه چرا باید لازم باشه اینکار کنید بستگی به پروژه شما داره. برای مثال من چند سال پیش پروژه ای رو کد میزدم که از OpenCV استفاده میکردم.

سوالات مشابه

0 امتیاز
0 پاسخ 531 بازدید
0 امتیاز
1 پاسخ 732 بازدید
0 امتیاز
1 پاسخ 891 بازدید
0 امتیاز
1 پاسخ 456 بازدید
...