جواب سریع: بله کافیه.
جواب طولانی: خیر،
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 قابل استفاده هستند.