آیا توسعه دهنده ی IOS نیاز به یادگیری Objective-C دارد؟

+1 رأی
میانگین بازدید روزانه 2.51118 بازدید
آیا برای یک توسعه دهنده ی IOS یادگیری Swift کفایت میکند؟ یا نیاز به یادگیری Objective-C هم وجود دارد؟
سوال 1 ماه قبل در تالار برنامه نویسی توسط Nasim Salmani (530 امتیاز)
برچسب گذاری مجدد در 3 روز قبل توسط Saeed Zarinfam

3 جواب

+2 رأی
 
بهترین جواب

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

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

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 قابل استفاده هستند.

جواب 3 هفته قبل توسط Farzadshbfn (35 امتیاز)
ویرایش 1 هفته قبل توسط Farzadshbfn
ممنون از پاسخ کاملتون.
+2 رأی

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

جواب 1 ماه قبل توسط ArashQu (20 امتیاز)
ویرایش 1 ماه قبل توسط Saeed Zarinfam
+2 رأی

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

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

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

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

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

جواب 1 ماه قبل توسط mr.Ali (20 امتیاز)
ویرایش 1 ماه قبل توسط Saeed Zarinfam

سوال های مشابه

0 رأی
1 جواب میانگین بازدید روزانه 0.0982 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.15167 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.1108 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.14130 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 9.2537 بازدید
0 رأی
3 جواب میانگین بازدید روزانه 0.16145 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 4.518 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 1.5946 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.0657 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 2.4779 بازدید
کانال تلگرام جواب یاب
...