سويفت (لغة برمجة)
لغة Swift هي لغة برمجة عامة الأغراض وعالية المستوى ومتعددة الأنماط ، تم تطويرها بواسطة كريس لاتنر عام 2010 لشركة Apple Inc. ، ويتولى صيانتها مجتمع المصادر المفتوحة . تُترجم Swift إلى لغة الآلة باستخدام مُترجم LLVM . صدرت Swift لأول مرة في يونيو 2014 [ 13 ] ، وأصبحت مجموعة أدوات Swift مُدمجة في Xcode منذ الإصدار السادس الذي صدر في سبتمبر 2014.
كانت آبل تهدف إلى أن تدعم لغة Swift العديد من المفاهيم الأساسية المرتبطة بلغة Objective-C ، ولا سيما الإرسال الديناميكي ، والربط المتأخر واسع النطاق ، والبرمجة القابلة للتوسيع ، وميزات مماثلة، ولكن بطريقة "أكثر أمانًا"، مما يُسهّل اكتشاف أخطاء البرمجيات . تتضمن Swift ميزات تعالج بعض أخطاء البرمجة الشائعة مثل إلغاء مرجعية المؤشر الفارغ ، وتوفر اختصارات نحوية للمساعدة في تجنب تراكم الأخطاء . تدعم Swift مفهوم قابلية توسيع البروتوكول ، وهو نظام قابلية توسيع يمكن تطبيقه على الأنواع والهياكل والفئات ، والذي تروج له آبل باعتباره تغييرًا حقيقيًا في نماذج البرمجة التي تُطلق عليها اسم "البرمجة الموجهة نحو البروتوكول" [ 14 ] (على غرار السمات وفئات الأنواع ). [ 15 ]
تم تقديم لغة Swift في مؤتمر Apple العالمي للمطورين (WWDC) لعام 2014. [ 16 ] وخضعت لتحديث إلى الإصدار 1.2 خلال عام 2014، ثم تحديث رئيسي إلى Swift 2 في مؤتمر WWDC 2015. كانت في البداية لغة احتكارية ، ولكن تم تحويل الإصدار 2.2 إلى برنامج مفتوح المصدر بموجب رخصة Apache 2.0 في 3 ديسمبر 2015، لمنصات Apple ونظام Linux . [ 17 ] [ 18 ]
تاريخ
بدأ تطوير لغة Swift في يوليو 2010 على يد كريس لاتنر ، بالتعاون لاحقًا مع العديد من المبرمجين الآخرين في شركة Apple . كان الدافع وراء تطوير Swift هو الحاجة إلى بديل للغة البرمجة السابقة لشركة Apple، Objective-C ، التي لم تشهد تغييرات تُذكر منذ أوائل ثمانينيات القرن الماضي، وافتقرت إلى ميزات اللغات الحديثة. استلهمت Swift أفكارها من لغات برمجة أخرى مثل Objective-C و Rust و Haskell و Ruby و Python و C# و CLU ، وغيرها الكثير. [ 7 ] في 2 يونيو 2014، أصبح تطبيق مؤتمر Apple العالمي للمطورين (WWDC) أول تطبيق يُطرح للجمهور مكتوب بلغة Swift. [ 19 ] تم إصدار نسخة تجريبية من لغة البرمجة لمطوري Apple المسجلين في المؤتمر، لكن الشركة لم تضمن توافق شفرة المصدر للنسخة النهائية من Swift مع النسخة التجريبية. خططت Apple لتوفير محولات شفرة المصدر عند الحاجة للإصدار الكامل. [ 19 ]
تم إصدار دليل لغة البرمجة Swift المجاني المكون من 500 صفحة في مؤتمر WWDC، وهو متاح على متجر Apple Books والموقع الرسمي. [ 20 ]
وصلت لغة Swift إلى الإصدار 1.0 في 9 سبتمبر 2014، مع إطلاق النسخة الذهبية من Xcode 6.0 لنظام iOS . [ 21 ] وصدرت Swift 1.1 في 22 أكتوبر 2014، بالتزامن مع إطلاق Xcode 6.1. [ 22 ] وصدرت Swift 1.2 في 8 أبريل 2015، مع Xcode 6.3. [ 23 ] وأُعلن عن Swift 2.0 في مؤتمر WWDC 2015، وأُتيحت لنشر التطبيقات في متجر App Store في 21 سبتمبر 2015. [ 24 ]
صدرت لغة Swift 3.0 في 13 سبتمبر 2016. [ 25 ] شهدت بنية Swift تطورًا ملحوظًا خلال الإصدار 3.0 ، حيث ركز الفريق الأساسي على استقرار الكود المصدري في الإصدارات اللاحقة. [ 26 ] [ 27 ]
أصدرت لغة Swift 4.0 في 19 سبتمبر 2017، [ 28 ] وقدمت عدة تغييرات على بعض الفئات والهياكل المدمجة. يمكن تحديث الشيفرة المكتوبة بإصدارات Swift السابقة باستخدام وظيفة الترحيل المدمجة في Xcode. أُصدرت Swift 4.1 في 29 مارس 2018. [ 29 ] في الربع الأول من عام 2018، تفوقت Swift على Objective-C من حيث الشعبية المُقاسة. [ 30 ]
قدمت لغة Swift 5، التي صدرت في مارس 2019، واجهة ثنائية مستقرة على منصات Apple، مما سمح بدمج بيئة تشغيل Swift في أنظمة تشغيل Apple. وهي متوافقة مع Swift 4 من حيث المصدر. [ 31 ]
صدرت لغة Swift 5.1 رسميًا في سبتمبر 2019. تعتمد Swift 5.1 على الإصدار السابق Swift 5، حيث وسّعت ميزات الاستقرار في اللغة لتشمل وقت الترجمة، وذلك من خلال تقديم ميزة استقرار الوحدات. يُتيح هذا الاستقرار إنشاء ومشاركة أُطر عمل ثنائية تعمل مع الإصدارات المستقبلية من Swift. [ 32 ] أما Swift 5.5، التي أعلنت عنها Apple رسميًا في مؤتمر WWDC 2021، فقد وسّعت بشكل ملحوظ دعم اللغة للتزامن والتعليمات البرمجية غير المتزامنة ، لا سيما من خلال تقديم نسخة فريدة من نموذج الممثل . [ 33 ] صدرت Swift 5.9 في سبتمبر 2023، وتضمنت نظامًا للماكرو، وحزمًا عامة للمعاملات، وميزات ملكية مثل consumeعامل التشغيل new. [ 34 ] أما Swift 5.10، التي صدرت في مارس 2024، فقد حسّنت نموذج التزامن في اللغة، مما يسمح بعزل البيانات بشكل كامل لمنع حدوث تضارب في البيانات .
صدرت لغة Swift 6 في سبتمبر 2024. [ 35 ] وصدرت Swift 6.1 في مارس 2025. وهي تتضمن "تحسينات لغوية جديدة لزيادة الإنتاجية، وتحسينات في التشخيص، وسمات الحزم، وجهودًا مستمرة لتحسين سلامة البيانات من التزامن وسهولة الاستخدام وأوقات التجميع". [ 36 ]
فازت لغة Swift بالمركز الأول في استطلاع مطوري Stack Overflow لعام 2015 [ 37 ] وحصلت على المركز الثاني في عام 2016. [ 38 ]
في 3 ديسمبر 2015، تم إتاحة لغة Swift ومكتباتها الداعمة ومصحح الأخطاء ومدير الحزم كمصدر مفتوح بموجب ترخيص Apache 2.0 مع استثناء مكتبة وقت التشغيل [ 39 ] ، وتم إنشاء Swift.org لاستضافة المشروع. يُستضاف كود المصدر على GitHub ، حيث يسهل على أي شخص الحصول على الكود وبنائه بنفسه، بل وحتى إنشاء طلبات سحب للمساهمة بكود في المشروع.
في ديسمبر 2015، أعلنت شركة IBM عن موقعها الإلكتروني Swift Sandbox، الذي يتيح للمطورين كتابة أكواد Swift في نافذة وعرض النتائج في نافذة أخرى. [ 40 ] [ 41 ] [ 42 ] تم إيقاف دعم Swift Sandbox في يناير 2018. [ 43 ]
خلال مؤتمر WWDC 2016 ، أعلنت آبل عن تطبيق حصري لأجهزة آيباد ، يُدعى Swift Playgrounds ، يهدف إلى تعليم المستخدمين البرمجة بلغة Swift. يُعرض التطبيق بواجهة ثلاثية الأبعاد تُشبه ألعاب الفيديو، وتُقدم ملاحظات عند وضع أسطر التعليمات البرمجية بترتيب معين وتنفيذها. [ 44 ] [ 45 ] [ 46 ]
في يناير 2017، أعلن كريس لاتنر رحيله عن شركة آبل لتولي منصب جديد في شركة تسلا موتورز ، حيث تولى تيد كريمينك، أحد أعضاء الفريق المخضرمين، قيادة مشروع سويفت. [ 47 ] [ 48 ]
خلال مؤتمر WWDC 2019، أعلنت شركة آبل عن SwiftUI مع Xcode 11، والذي يوفر إطار عمل لتصميم بنية واجهة المستخدم التصريحية عبر جميع منصات آبل. [ 49 ]
تتوفر التنزيلات الرسمية لحزمة تطوير البرامج (SDK) ومجموعة الأدوات لنظام التشغيل أوبونتو (Ubuntu ) من لينكس منذ إصدار Swift 2.2، مع إضافة المزيد من التوزيعات منذ إصدار Swift 5.2.4، بالإضافة إلى CentOS وAmazon Linux. [ 50 ] كما توجد حزمة تطوير برامج غير رسمية ومجموعة أدوات أصلية لنظام Android ، [ 51 ] [ 52 ] وفي أكتوبر 2025، أعلن فريق عمل Swift لنظام Android عن إصدار تجريبي من حزمة تطوير البرامج الرسمية Swift لنظام Android. [ 53 ]
المنصات
تدعم لغة Swift أنظمة تشغيل Apple ( Darwin و iOS و iPadOS و macOS و tvOS و watchOS ) و Linux و Windows و WebAssembly و Android . [ 54 ] [ 55 ]
من أهم جوانب تصميم لغة Swift قدرتها على التفاعل مع الكم الهائل من أكواد Objective-C الموجودة والمطورة لمنتجات Apple على مدى العقود الماضية، مثل Cocoa وإطار عمل Cocoa Touch . على منصات Apple، [ 56 ] ترتبط Swift بمكتبة وقت تشغيل Objective-C ، مما يسمح بتشغيل أكواد C و Objective-C و C++ وSwift ضمن برنامج واحد. [ 57 ]
سجل الإصدارات
| إصدار Swift | تاريخ الافراج عنه | نظام التشغيل macOS | لينكس | ويندوز |
|---|---|---|---|---|
| 1.0 | 9 سبتمبر 2014 | نعم | لا | لا |
| 1.1 | 22 أكتوبر 2014 | نعم | لا | لا |
| 1.2 | 8 أبريل 2015 | نعم | لا | لا |
| 2.0 | 21 سبتمبر 2015 | نعم | لا | لا |
| 2.1 | 20 أكتوبر 2015 | نعم | لا | لا |
| 2.2 | 21 مارس 2016 | نعم | نعم | لا |
| 2.2.1 | 3 مايو 2016 | نعم | نعم | لا |
| 3.0 | 13 سبتمبر 2016 | نعم | نعم | لا |
| 3.0.1 | 28 أكتوبر 2016 | نعم | نعم | لا |
| 3.0.2 | 13 ديسمبر 2016 | نعم | نعم | لا |
| 3.1 | 27 مارس 2017 | نعم | نعم | لا |
| 3.1.1 | 21 أبريل 2017 | نعم | نعم | لا |
| 4.0 | 19 سبتمبر 2017 | نعم | نعم | لا |
| 4.0.2 | 1 نوفمبر 2017 | نعم | نعم | لا |
| 4.0.3 | 5 ديسمبر 2017 | نعم | نعم | لا |
| 4.1 | 29 مارس 2018 | نعم | نعم | لا |
| 4.1.1 | 4 مايو 2018 | لا | نعم | لا |
| 4.1.2 | 31 مايو 2018 | نعم | نعم | لا |
| 4.1.3 | 27 يوليو 2018 | لا | نعم | لا |
| 4.2 | 17 سبتمبر 2018 | نعم | نعم | لا |
| 4.2.1 | 30 أكتوبر 2018 | نعم | نعم | لا |
| 4.2.2 | 4 فبراير 2019 | لا | نعم | لا |
| 4.2.3 | 28 فبراير 2019 | لا | نعم | لا |
| 4.2.4 | 29 مارس 2019 | لا | نعم | لا |
| 5.0 [ 58 ] | 25 مارس 2019 | نعم | نعم | لا |
| 5.0.1 | 18 أبريل 2019 | نعم | نعم | لا |
| 5.0.2 | 15 يوليو 2019 | لا | نعم | لا |
| 5.0.3 | 30 أغسطس 2019 | لا | نعم | لا |
| 5.1 | 10 سبتمبر 2019 | نعم | نعم | لا |
| 5.1.1 | 11 أكتوبر 2019 | لا | نعم | لا |
| 5.1.2 | 7 نوفمبر 2019 | نعم | نعم | لا |
| 5.1.3 | 13 ديسمبر 2019 | نعم | نعم | لا |
| 5.1.4 | 31 يناير 2020 | لا | نعم | لا |
| 5.1.5 | 9 مارس 2020 | لا | نعم | لا |
| 5.2 | 24 مارس 2020 | نعم | نعم | لا |
| 5.2.1 | 30 مارس 2020 | لا | نعم | لا |
| 5.2.2 | 15 أبريل 2020 | نعم | نعم | لا |
| 5.2.3 | 29 أبريل 2020 | لا | نعم | لا |
| 5.2.4 | 20 مايو 2020 | نعم | نعم | لا |
| 5.2.5 | 5 أغسطس 2020 | لا | نعم | لا |
| 5.3 | 16 سبتمبر 2020 | نعم | نعم | نعم [ 59 ] |
| 5.3.1 | 13 نوفمبر 2020 | نعم | نعم | نعم |
| 5.3.2 | 15 ديسمبر 2020 | نعم | نعم | نعم |
| 5.3.3 | 25 يناير 2021 | لا | نعم | نعم |
| 5.4 [ 60 ] | 26 أبريل 2021 | نعم | نعم | نعم |
| 5.4.1 | 25 مايو 2021 | لا | نعم | نعم |
| 5.4.2 | 28 يونيو 2021 | نعم | نعم | نعم |
| 5.4.3 | 9 سبتمبر 2021 | لا | نعم | نعم |
| 5.5 | 20 سبتمبر 2021 | نعم | نعم | نعم |
| 5.5.1 | 27 أكتوبر 2021 | نعم | نعم | نعم |
| 5.5.2 | 14 ديسمبر 2021 | نعم | نعم | نعم |
| 5.5.3 | 9 فبراير 2022 | لا | نعم | نعم |
| 5.6 [ 61 ] | 14 مارس 2022 | نعم | نعم | نعم |
| 5.6.1 [ 62 ] | 9 أبريل 2022 | لا | نعم | نعم |
| 5.6.2 [ 63 ] | 15 يونيو 2022 | لا | نعم | نعم |
| 5.6.3 [ 64 ] | 2 سبتمبر 2022 | لا | نعم | نعم |
| 5.7 [ 65 ] | 12 سبتمبر 2022 | نعم | نعم | نعم |
| 5.7.1 [ 66 ] | 1 نوفمبر 2022 | نعم | نعم | نعم |
| 5.8 [ 67 ] | 30 مارس 2023 | نعم | نعم | نعم |
| 5.8.1 [ 68 ] | 1 يونيو 2023 | نعم | نعم | نعم |
| 5.9 [ 69 ] | 18 سبتمبر 2023 | نعم | نعم | نعم |
| 5.9.1 [ 70 ] | 19 أكتوبر 2023 | نعم | نعم | نعم |
| 5.9.2 [ 71 ] | 11 ديسمبر 2023 | نعم | نعم | نعم |
| 5.10 [ 72 ] | 5 مارس 2024 | نعم | نعم | نعم |
| 5.10.1 [ 73 ] | 5 يونيو 2024 | نعم | نعم | نعم |
| 6.0 [ 74 ] | 16 سبتمبر 2024 | نعم | نعم | نعم |
| 6.1 [ 75 ] | 31 مارس 2025 | نعم | نعم | نعم |
| 6.2 [ 76 ] | 17 سبتمبر 2025 | نعم | نعم | نعم |
| 6.3 [ 77 ] | 27 مارس 2026 | نعم | نعم | نعم |
سمات
لغة Swift هي لغة برمجة متعددة الأغراض تستخدم مفاهيم نظرية لغات البرمجة الحديثة، وتسعى إلى تقديم بنية بسيطة لكنها فعّالة. تتضمن Swift ابتكارات وأساليب من لغات برمجة مختلفة، مع استلهام ملحوظ من لغة Objective-C التي حلت محلها كلغة التطوير الأساسية على منصات Apple.
صُممت لغة Swift لتكون آمنة وسهلة الاستخدام للمبرمجين الجدد دون التضحية بالسرعة. تدير Swift الذاكرة تلقائيًا بشكل افتراضي، وتضمن تهيئة المتغيرات قبل استخدامها. يتم فحص الوصول إلى المصفوفات بحثًا عن أخطاء خارج النطاق، كما يتم فحص عمليات الأعداد الصحيحة بحثًا عن تجاوز السعة. تتيح أسماء المعاملات إنشاء واجهات برمجة تطبيقات (APIs) واضحة. تُحدد البروتوكولات الواجهات التي يمكن للأنواع اعتمادها، بينما تسمح الامتدادات للمطورين بإضافة المزيد من الوظائف إلى الأنواع الموجودة. تُمكّن Swift البرمجة كائنية التوجه من خلال دعم الفئات ، والأنواع الفرعية ، وتجاوز الأساليب . تسمح القيم الاختيارية بالتعامل مع القيم الفارغة (nil) بشكل صريح وآمن. يمكن كتابة البرامج المتزامنة باستخدام صيغة async/await ، وتعمل الكائنات الفاعلة على عزل الحالة القابلة للتغيير المشتركة للقضاء على تضارب البيانات. [ 78 ] [ 79 ]
بناء الجملة الأساسي
يشبه بناء جملة لغة Swift لغات البرمجة من نمط C. يبدأ تنفيذ التعليمات البرمجية في النطاق العام افتراضيًا. [ 80 ] بدلاً من ذلك، يمكن تطبيق السمة على تعريف بنية أو فئة أو تعداد للإشارة إلى أنها تحتوي على نقطة دخول البرنامج. [ 81 ]@main
برنامج "Hello, World!" الخاص بلغة Swift هو:
print ( "مرحباً بالعالم!" )الدالة المستخدمة هنا مُضمنة في مكتبة Swift القياسية، وهي متاحة لجميع البرامج دون الحاجة إلى استيراد وحدات خارجية. لا يشترط أن تنتهي العبارات في Swift بفاصلة منقوطة، ولكن الفاصلة المنقوطة ضرورية لفصل العبارات المتعددة المكتوبة على نفس السطر. تبدأ التعليقات أحادية السطر بـ `<br> ` وتستمر حتى نهاية السطر الحالي. أما التعليقات متعددة الأسطر فتُحاط بـ `<br>` و `<br>`. تُعلن الثوابت ( المتغيرات التي لا يمكن تعديلها) باستخدام الكلمة المفتاحية `<br>`، بينما يمكن تغيير المتغيرات المُعلنة باستخدام الكلمة المفتاحية `<br>`. يجب تهيئة القيم قبل قراءتها. يمكن للمتغيرات استنتاج نوعها بناءً على نوع القيمة الأولية المُقدمة. إذا تم تعيين القيمة الأولية بعد إعلان القيمة، فيجب تحديد نوعها صراحةً. [ 80 ]print(_:separator:terminator:)///**/letvar
let highScoreThreshold = 1000 // ثابت من النوع Int. تم استنتاج النوع بناءً على القيمة المقدمة.var currentScore = 980 // متغير من النوع Int.currentScore = 1200 // يمكن أن تتغير قيمة المتغيرات بمرور الوقت.let playerMessage : String // ثابت من النوع String.إذا كانت النتيجة الحالية أكبر من عتبة أعلى نتيجة {playerMessage = "أنت لاعب ممتاز!"} آخر {playerMessage = "حظًا أوفر في المرة القادمة."}print ( playerMessage ) // يطبع "أنت لاعب ممتاز!"تُدار عملية التحكم في تدفق التعليمات البرمجية في لغة Swift باستخدام عبارات if-else و guard و switch ، بالإضافة إلى حلقات while و for-in . تأخذ هذه العبارات مُعاملًا منطقيًا (Boolean) وتُنفذ محتوى العبارة إذا كان الشرط صحيحًا، وإلا تُنفذ المحتوى الاختياري. يوفر بناء الجملة اختصارًا برمجيًا للتحقق من وجود قيمة اختيارية وفك تغليفها في الوقت نفسه.ififelseif-let
لنفترض أن العدد 42إذا كان باقي قسمة عدد ما على 2 يساوي صفرًا { // استخدم عامل الباقي لإيجاد باقي قسمة عدد ما على 2.print ( " \( someNumber ) هو عدد زوجي." )} آخر {print ( " \( someNumber ) is odd." )}// يطبع "42 عدد زوجي".تُعرَّف الدوال باستخدام الكلمة المفتاحية. قد تحمل معاملات الدوال أسماءً تُسهِّل قراءة استدعاءات الدوال كعبارات. يسمح وضع شرطة سفلية قبل اسم المعامل بحذف تسمية الوسيط من موقع الاستدعاء. يمكن للدوال استخدام المجموعات لإرجاع بيانات متعددة دفعة واحدة.func
func constructGreeting ( for name : String ) -> String {أعد "مرحباً \( الاسم ) !"}let greeting = constructGreeting ( for : "Craig" )print ( greeting ) // يطبع "مرحباً كريج!"يمكن تعيين الدوال، والدوال المجهولة المعروفة باسم الإغلاقات ، للخصائص وتمريرها في جميع أنحاء البرنامج مثل أي قيمة أخرى.
دالة القسمة على اثنين ( _ aNum : Int ) -> Int {أعد aNum / 2}func multiplyByTwo ( _ aNum : Int ) -> Int {أعد aNum * 2}let mathOperation = multiplyByTwoprint ( mathOperation ( 21 )) // يطبع "42"تتطلب هذه العبارات أن يكون الشرط المُعطى صحيحًا قبل المتابعة بعد العبارة، وإلا سيتم تنفيذ guardمحتوى العبارة المُقدمة . يجب أن تُنهي العبارة التحكم في كتلة التعليمات البرمجية التي تظهر فيها. تُعد هذه العبارات مفيدة لضمان استيفاء متطلبات معينة قبل متابعة تنفيذ البرنامج. على وجه الخصوص، يمكن استخدامها لإنشاء نسخة غير مُغلفة من قيمة اختيارية مضمونة بأنها غير فارغة (غير صفرية) لبقية النطاق المُحيط.guardelseelseguardguard
دالة القسمة ( البسط : عدد صحيح ؟، المقام : عدد صحيح ) -> عدد صحيح ؟ {تحقق من أن المقام لا يساوي صفرًا وإلا {print ( "لا يمكن القسمة على صفر." )إرجاع قيمة فارغة}guard let numerator else {print ( "البسط المقدم يساوي صفرًا." )إرجاع قيمة فارغة}إرجاع البسط / المقام}let result = divide ( numerator : 3 , byDenominator : 0 )print ( "نتيجة القسمة هي: \( result ) " )// يطبع:// "لا يمكن القسمة على صفر."// "نتيجة القسمة هي: لا شيء."switchتقارن العبارات قيمةً ما مع عدة قيم محتملة، ثم تُنفّذ كتلة التعليمات البرمجية المرتبطة بها. switchيجب أن تكون العبارات شاملة، إما بتضمين حالات لجميع القيم الممكنة، أو بتضمين defaultحالة تُنفّذ عندما لا تتطابق القيمة المُقدّمة مع أي من الحالات الأخرى. switchلا تتلاشى الحالات ضمنيًا، على الرغم من إمكانية حدوث ذلك صراحةً باستخدام fallthroughالكلمة المفتاحية `require`. يمكن استخدام مطابقة الأنماط بطرق متنوعة داخل switchالعبارات. إليك مثال على مطابقة عدد صحيح مع عدد من النطاقات المحتملة:
لنفترض أن العدد 42مفتاح بعض الأرقام {الحالة ..< 0 :print ( " \( someNumber ) negative." )الحالة 0 :print ( " \( someNumber ) is 0." )الحالة 1. .. 9 :print ( " \( someNumber ) أكبر من 0، ولكن أقل من 10." )تقصير :print ( " \( someNumber ) أكبر من 9." )}// يطبع "42 أكبر من 9".for-inتتكرر الحلقات على سلسلة من القيم:
let names = [ "Will" , "Anna" , "Bart" ]لكل اسم في قائمة الأسماء {اطبع ( الاسم )}// يطبع:// سوف// آنابارتwhileتستمر الحلقات في التكرار طالما أن الشرط المنطقي المحدد يُقيّم إلى true:
// اجمع كل الأرقام من 1 إلى 5.المتغير i = 1var result = 0while i <= 5 { // تقوم الحلقة بتنفيذ جسمها طالما أن i أقل من أو يساوي 5. result += i // أضف i إلى النتيجة الحالية.i += 1 // زيادة قيمة i بمقدار 1.}print ( result ) // يطبع "15"دعم الإغلاق
تدعم لغة Swift الدوال المغلقة ، وهي عبارة عن وحدات وظيفية مستقلة يمكن تمريرها واستخدامها في الكود، [ 82 ] ويمكن استخدامها أيضًا كدوال مجهولة . إليك بعض الأمثلة:
// يمكن تحديد نوع الإغلاق، المحدد بواسطة قيم الإدخال والإخراج الخاصة به، خارج الإغلاق:let closure1 : ( Int , Int ) -> Int = { arg1 , arg2 inأعد arg1 + arg2}// …أو داخله:let closure2 = { ( arg1 : Int , arg2 : Int ) -> Int inأعد arg1 + arg2}// في معظم الحالات، يمكن للمترجم استنتاج نوع الإرجاع للدالة المغلقة تلقائيًا.let closure3 = { arg1 : Int , arg2 : Int inأعد arg1 + arg2}يمكن إسناد الدوال المغلقة إلى المتغيرات والثوابت، ويمكن تمريرها إلى دوال أو دوال مغلقة أخرى كمعاملات. قد تحذف الدوال المغلقة ذات التعبير الواحد الكلمة returnالمفتاحية.
تتميز لغة Swift أيضاً بصيغة الإغلاق اللاحق، والتي تسمح بكتابة الإغلاق بعد نهاية استدعاء الدالة بدلاً من داخل قائمة معاملات الدالة. ويمكن حذف الأقواس تماماً إذا كان الإغلاق هو المعامل الوحيد للدالة.
// تأخذ هذه الدالة دالة مغلقة لا تستقبل أي معلمات إدخال وتعيد عددًا صحيحًا،// يقوم بتقييمها، ويستخدم قيمة الإرجاع الخاصة بالإغلاق (عدد صحيح) كقيمة إرجاع للدالة.دالة foo ( قاطعة الإغلاق : () -> عدد صحيح ) -> عدد صحيح {return bar ()}// بدون صيغة الإغلاق اللاحقة:foo ( closure : { return 1 })// مع صيغة الإغلاق اللاحقة، والإرجاع الضمني:foo { 1 }ابتداءً من الإصدار 5.3، يدعم Swift إغلاقات لاحقة متعددة: [ 83 ]
// تمرر هذه الدالة القيمة المُعادة من الإغلاق الأول كمعامل للإغلاق الثاني، // وتعيد نتيجة الإغلاق الثاني: func foo ( bar : () -> Int , baz : ( Int ) -> Int ) -> Int { return baz ( bar ()) }// بدون إغلاقات لاحقة: foo ( bar : { return 1 }, baz : { x in return x + 1 })// مع إغلاق لاحق واحد: foo ( bar : { return 1 }) { x in return x + 1 }// مع وجود دالتين إغلاق لاحقتين (تم حذف اسم وسيط الدالة الأولى فقط): foo { return 1 } baz : { x in return x + 1 }ستوفر لغة Swift أسماءً مختصرة للوسائط في الدوال المغلقة المضمنة، مما يُغني عن الحاجة إلى تسمية جميع معاملات هذه الدوال صراحةً. [ 84 ] يمكن الإشارة إلى الوسائط بالأسماء $0، $1، $2، وهكذا.
let names = [ "جوزفين" , "ستيف" , "كريس" , "باربرا" ]// تستدعي الدالة filter الدالة المُعطاة لكل قيمة في قائمة الأسماء. // يتم الاحتفاظ بالقيم التي يقل عدد أحرفها عن 6، ويتم حذف الباقي. let shortNames = names.filter { $ 0.count < 6 }print ( shortNames ) // يطبع "["Steve", "Chris"]"قد تستخلص الدوال المغلقة قيمًا من نطاقها المحيط. وستشير الدالة المغلقة إلى هذه القيمة المستخلصة طالما بقيت الدالة المغلقة موجودة.
func makeMultiplier ( withMultiple multiple : Int ) -> ( Int ) -> ( Int ) { // إنشاء وإرجاع دالة مغلقة تأخذ عددًا صحيحًا كمدخل وتعيد المدخل مضروبًا في قيمة المضاعف. return { $0 * multiple } }let multiplier = makeMultiplier ( withMultiple : 3 ) print ( multiplier ( 3 )) // يطبع "9" print ( multiplier ( 10 )) // يطبع "30"دعم السلاسل
تتضمن مكتبة Swift القياسية أنواعًا متوافقة مع Unicode String. Characterيمكن تهيئة قيم السلاسل النصية باستخدام سلسلة نصية حرفية، وهي عبارة عن سلسلة من الأحرف محاطة بعلامات اقتباس مزدوجة. يمكن دمج السلاسل النصية باستخدام +المعامل:
var someString = "Hello،" someString += "world!"تتيح عملية استيفاء السلاسل إنشاء سلسلة نصية جديدة من قيم وتعبيرات أخرى. \سيتم إدراج القيم المكتوبة بين قوسين مسبوقة بـ في السلسلة النصية المحيطة بها: [ 85 ]
var currentScore = 980 print ( "درجتك هي \( currentScore ) ." )// يطبع "درجتك هي 980."يمكن استخدام حلقة for-in للتكرار على الأحرف الموجودة في سلسلة نصية:
for character in "Swift" { print ( character ) } // S // w // i // f // tإذا تم استيراد إطار عمل Foundation، فإن Swift يقوم بشكل غير مرئي بربط نوع String بـ NSString (فئة String المستخدمة بشكل شائع في Objective-C).
الكائنات القابلة للاستدعاء
في لغة Swift، يتم تعريف الكائنات القابلة للاستدعاء باستخدام callAsFunction. [ 86 ]
struct CallableStruct { var value : Int func callAsFunction ( _ number : Int , scale : Int ) { print ( scale * ( number + value )) } } let callable = CallableStruct ( value : 100 ) callable ( 4 , scale : 2 ) callable . callAsFunction ( 4 , scale : 2 ) // كلا استدعاءي الدالتين يطبعان 208.التحكم في الوصول
تدعم لغة Swift خمسة مستويات للتحكم في الوصول للرموز: open`<T>` public، internal`<T>`، fileprivate`<T>`، و`< privateT>`. على عكس العديد من لغات البرمجة كائنية التوجه، تتجاهل هذه المستويات التسلسل الهرمي للوراثة : ` private<T>` يشير إلى أن الرمز متاح فقط في النطاق المباشر ، ` fileprivate<T>` يشير إلى أنه متاح فقط من داخل الملف، `<T>` internalيشير إلى أنه متاح داخل الوحدة الحاوية، `<T> ` publicيشير إلى أنه متاح من أي وحدة، و open(فقط للفئات وطرقها) يشير إلى أنه يمكن إنشاء فئات فرعية من الفئة خارج الوحدة. [ 87 ]
الخيارات والتسلسل
من أهم ميزات لغة Swift أنواع الخيارات ، التي تسمح للمراجع أو القيم بالعمل بطريقة مشابهة للنمط الشائع في لغة C ، حيث يمكن للمؤشر أن يشير إما إلى قيمة محددة أو لا يشير إلى أي قيمة على الإطلاق. وهذا يعني أن الأنواع غير الاختيارية لا يمكن أن تؤدي إلى خطأ مؤشر فارغ ؛ إذ يضمن المترجم عدم إمكانية حدوث ذلك.
تُنشأ الأنواع الاختيارية باستخدام Optionalالتعداد. لإنشاء عدد صحيح يقبل القيم الفارغة، يُستخدم تعريف مشابه لـ ` . كما هو الحال في لغة C#، [ 88 ] تتضمن لغة Swift أيضًا اختصارًا برمجيًا لهذا الغرض، يسمح بالإشارة إلى أن المتغير اختياري بوضع علامة استفهام بعد اسم النوع . [ 89 ] المتغيرات أو الثوابت التي تُحدد على أنها اختيارية إما أن يكون لها قيمة من النوع الأساسي أو تكون فارغة . تُغلف الأنواع الاختيارية النوع الأساسي، مما ينتج عنه نسخة مختلفة. وهما نوعان مختلفان جوهريًا، فالأول من النوع `، بينما الثاني هو تعداد قد يحمل قيمة ما.var optionalInteger: Optional<Int>var optionalInteger: Int?nilStringString?StringOptionalString
للوصول إلى القيمة الموجودة بالداخل، بافتراض أنها ليست فارغة (nil)، يجب فك تغليفها لعرض الكائن الموجود بداخلها. ويتم ذلك باستخدام !المعامل التالي:
let myValue = anOptionalInstance !. someMethod ()في هذه الحالة، !يقوم المعامل بفك التغليف anOptionalInstanceلعرض الكائن الموجود بداخله، مما يسمح باستدعاء الدالة عليه. إذا anOptionalInstanceكانت قيمة `nil`، يحدث خطأ مؤشر فارغ، مما يؤدي إلى إنهاء البرنامج. يُعرف هذا بفك التغليف القسري. يمكن فك تغليف القيم الاختيارية بأمان باستخدام التسلسل الاختياري الذي يتحقق أولاً مما إذا كانت قيمة الكائن `nil`، ثم يفك تغليفه إذا كانت غير فارغة.
let myValue = anOptionalInstance ?. someMethod ()في هذه الحالة، لا يتم استدعاء وقت التشغيل someMethodإلا إذا anOptionalInstanceلم تكن الخاصية فارغة، مما يؤدي إلى تجاهل الخطأ. ?يجب وضع `a` بعد كل خاصية اختيارية. إذا كانت أي من هذه الخصائص فارغة، فسيتم تقييم التعبير بأكمله على أنه فارغ. أصل مصطلح " التسلسل" يأتي من الحالة الأكثر شيوعًا حيث يتم ربط عدة استدعاءات/دوال جلب معًا. على سبيل المثال:
let aTenant = aBuilding.tenantList [ 5 ] let theirLease = aTenant.leaseDetails let leaseStart = theirLease ? .startDateيمكن اختصارها إلى:
let leaseStart = aBuilding.tenantList [ 5 ] .leaseDetails ? .startDateيسمح استخدام Swift للخيارات للمترجم باستخدام الإرسال الثابت لأن إجراء فك التغليف يتم استدعاؤه على مثيل محدد (الغلاف)، بدلاً من حدوثه في نظام إرسال وقت التشغيل.
أنواع القيم
في العديد من لغات البرمجة كائنية التوجه، تُمثَّل الكائنات داخليًا بجزأين. يُخزَّن الكائن ككتلة بيانات في الذاكرة الديناميكية (heap )، بينما يُمثَّل اسمه (أو "مؤشره") بمؤشر . تُمرَّر الكائنات بين الدوال بنسخ قيمة المؤشر، مما يسمح لأي شخص لديه نسخة بالوصول إلى نفس البيانات الأساسية في الذاكرة الديناميكية. في المقابل، تُمثَّل الأنواع الأساسية مثل الأعداد الصحيحة والأعداد العشرية مباشرةً؛ إذ يحتوي المؤشر على البيانات نفسها، وليس مؤشرًا إليها، وتُمرَّر هذه البيانات مباشرةً إلى الدوال بنسخها. يُطلق على أساليب الوصول هذه اسم " التمرير بالمرجع" في حالة الكائنات، و "التمرير بالقيمة" في حالة الأنواع الأساسية.
لكلٍّ من المفهومين مزايا وعيوب. تُعدّ الكائنات مفيدةً عندما تكون البيانات كبيرة، مثل وصف نافذة أو محتويات مستند. في هذه الحالات، يتم الوصول إلى تلك البيانات بنسخ قيمة 32 أو 64 بت، بدلاً من نسخ بنية بيانات كاملة. مع ذلك، فإن القيم الأصغر، مثل الأعداد الصحيحة، لها نفس حجم المؤشرات (عادةً ما يكون كلاهما كلمة واحدة )، لذا لا توجد ميزة لتمرير مؤشر بدلاً من تمرير القيمة.
توفر لغة Swift دعمًا مدمجًا للكائنات باستخدام دلالات التمرير بالمرجع أو التمرير بالقيمة، حيث يستخدم الأول التصريح class، بينما يستخدم الثاني struct. تتمتع الهياكل في Swift بجميع ميزات الفئات تقريبًا: الأساليب، وتنفيذ البروتوكولات، واستخدام آليات التوسيع. لهذا السبب، تُطلق Apple على جميع البيانات بشكل عام اسم مثيلات ، بدلاً من كائنات أو قيم. مع ذلك، لا تدعم الهياكل الوراثة. [ 90 ]
للمبرمج حرية اختيار الدلالات الأنسب لكل بنية بيانات في التطبيق. تُعرَّف البنى الأكبر حجمًا، مثل النوافذ، كفئات، مما يسمح بتمريرها كمؤشرات. أما البنى الأصغر، مثل نقطة ثنائية الأبعاد، فيمكن تعريفها كبنى، والتي تُمرَّر بالقيمة وتتيح الوصول المباشر إلى بياناتها الداخلية دون أي توجيه غير مباشر أو عدّ للمراجع. إن تحسين الأداء المتأصل في مفهوم تمرير القيمة كبيرٌ لدرجة أن لغة Swift تستخدم هذه الأنواع لجميع أنواع البيانات الشائعة تقريبًا، بما في ذلك أنواع البيانات وأنواع البيانات التي Intتُمثَّل Doubleعادةً بالكائنات، مثل أنواع Stringالبيانات وأنواع البيانات Array. [ 90 ] كما أن استخدام أنواع القيم قد يُحسِّن أداء تطبيقات المستخدم بشكل ملحوظ. [ 91 ]
Arrayتستخدم جميعها Dictionaryتقنية النسخ عند الكتابة ، بحيث لا تُنسخ بياناتها إلا عند محاولة البرنامج تغيير قيمة فيها. وهذا يعني أن لكل دالة وصول مؤشرًا إلى نفس وحدة تخزين البيانات. لذا ، فبينما تُخزن البيانات فعليًا كنسخة واحدة في الذاكرة، فإن هذه القيم منفصلة على مستوى التطبيق، ويُفرض الفصل المادي باستخدام تقنية النسخ عند الكتابة فقط عند الحاجة. [ 92 ]Set
الإضافات
تُضيف الإضافات وظائف جديدة إلى نوع موجود، دون الحاجة إلى إنشاء فئة فرعية أو حتى الوصول إلى شفرة المصدر الأصلية. يمكن للإضافات إضافة طرق جديدة، وقيم ابتدائية، وخصائص محسوبة، وفهارس، وتوافقات بروتوكول. [ 93 ] على سبيل المثال، يمكن إضافة مدقق إملائي إلى Stringالنوع الأساسي، مما يعني أن جميع مثيلات هذا النوع Stringفي البرنامج ستكتسب القدرة على التدقيق الإملائي. يُستخدم هذا النظام أيضًا على نطاق واسع كتقنية تنظيمية، حيث يسمح بتجميع الشفرة ذات الصلة في إضافات شبيهة بالمكتبات.
يتم تعريف الامتدادات باستخدام extensionالكلمة المفتاحية.
struct Rectangle {let width : Doublelet height : Double}امتداد مستطيل {var area : Double {إرجاع الارتفاع * العرض}}البرمجة الموجهة نحو البروتوكول
تضمن البروتوكولات أن يُنفذ نوعٌ مُحدد مجموعةً من الأساليب أو الخصائص، ما يعني أن بإمكان أي كائن آخر في النظام استدعاء تلك الأساليب على أي كائن يُنفذ ذلك البروتوكول. يُستخدم هذا غالبًا في لغات البرمجة الكائنية الحديثة كبديلٍ عن الوراثة المتعددة ، على الرغم من أن مجموعات الميزات ليست متطابقة تمامًا.
في لغة Objective-C، ومعظم اللغات الأخرى التي تُطبّق مفهوم البروتوكول، يقع على عاتق المبرمج ضمان تنفيذ الطرق المطلوبة في كل فئة. [ 94 ] تُضيف لغة Swift إمكانية إضافة هذه الطرق باستخدام الامتدادات، واستخدام البرمجة العامة (generics) لتنفيذها. يسمح الجمع بين هذين الأمرين بكتابة البروتوكولات مرة واحدة ودعم مجموعة واسعة من الحالات. كما يُمكن استخدام آلية الامتدادات لإضافة توافق البروتوكول إلى كائن لا يُدرج هذا البروتوكول في تعريفه. [ 95 ]
على سبيل المثال، قد يتم الإعلان عن بروتوكول يسمى Printable، مما يضمن أن الحالات التي تتوافق مع البروتوكول تنفذ descriptionشرطًا يتعلق بالخاصية وشرطًا printDetails()يتعلق بالأسلوب:
// تعريف بروتوكول باسم Printable protocol Printable { var description : String { get } // شرط خاصية للقراءة فقط func printDetails () // شرط دالة }يمكن الآن اعتماد هذا البروتوكول من قبل أنواع أخرى:
// تطبيق بروتوكول Printable في فئة class MyClass : Printable { var description : String { return " An instance of MyClass" }func printDetails () { print ( description ) } }يمكن استخدام الإضافات لإضافة توافق البروتوكول إلى الأنواع. كما يمكن توسيع البروتوكولات نفسها لتوفير تطبيقات افتراضية لمتطلباتها. يمكن للمستخدمين تحديد تطبيقاتهم الخاصة، أو يمكنهم استخدام التطبيق الافتراضي.
extension Printable { // ستتلقى جميع مثيلات Printable هذا التنفيذ، أو يمكنها تعريف تنفيذها الخاص. func printDetails () { print ( description ) } }// أصبح نوع Bool الآن متوافقًا مع Printable، ويرث تنفيذ printDetails() المذكور أعلاه. extension Bool : Printable { var description : String { return "An instance of Bool with value: \( self ) " }}في لغة Swift، كما هو الحال في العديد من اللغات الحديثة التي تدعم الواجهات، يمكن استخدام البروتوكولات كأنواع، مما يعني أنه يمكن تعريف المتغيرات والأساليب بواسطة البروتوكول بدلاً من نوعها المحدد:
func getSomethingPrintable () -> any Printable { return true }var someSortOfPrintableInstance = getSomethingPrintable () print ( someSortOfPrintableInstance . description )// يطبع "نسخة من نوع Bool بقيمة: صحيح"لا يهم نوع البيانات المحدد someSortOfPrintableInstance، فالمترجم سيضمن توافقها مع البروتوكول، وبالتالي فإن هذا الكود آمن. ويعني هذا التركيب أيضًا أن المجموعات يمكن أن تستند إلى بروتوكولات، مثل let printableArray = [any Printable]...
تُستخدم كلٌّ من الامتدادات والبروتوكولات على نطاق واسع في مكتبة Swift القياسية؛ ففي Swift 5.9، شكّلت البروتوكولات ما يقارب 1.2% من جميع الرموز في المكتبة القياسية، بينما شكّلت متطلبات البروتوكولات أو تطبيقاتها الافتراضية 12.3% أخرى. [ 96 ] على سبيل المثال، تستخدم Swift الامتدادات لإضافة Equatableالبروتوكول إلى العديد من أنواعها الأساسية، مثل السلاسل النصية والمصفوفات، مما يسمح بمقارنتها باستخدام ==المعامل. Equatableكما يُحدّد البروتوكول هذا التطبيق الافتراضي.
func !=< T : Equatable >( lhs : T , rhs : T ) -> Boolتُعرّف هذه الدالة طريقةً تعمل على أي كائن مُطابق للمواصفات Equatable، وتُوفّر عامل " لا يساوي" . أي كائن، سواءً كان فئةً أو بنيةً، يكتسب هذا التنفيذ تلقائيًا بمجرد مطابقته للمواصفات Equatable. [ 97 ]
يمكن دمج البروتوكولات والامتدادات والأنواع العامة لإنشاء واجهات برمجة تطبيقات متطورة. على سبيل المثال، تسمح القيود للأنواع بتبني البروتوكولات أو الأساليب بشكل مشروط بناءً على خصائص النوع المُتبني. ومن حالات الاستخدام الشائعة إضافة أسلوب إلى أنواع المجموعات فقط عندما تكون العناصر الموجودة داخل المجموعة Equatable:
مصفوفة الامتداد حيث العنصر : قابل للمساواة {// ستكون الدالة allEqual متاحة فقط على عناصر المصفوفة التي تحتوي على عناصر قابلة للمساواة. func allEqual ( ) -> Bool { for element in self { if element != self.first { return false } } return true } }التزامن
أدخلت لغة Swift 5.5 ميزة التزامن المنظم. [ 98 ] يستخدم التزامن المنظم صيغة Async/await المشابهة للغات Kotlin وJavaScript وRust. تُعرَّف الدالة غير المتزامنة باستخدام الكلمة asyncالمفتاحية async/await بعد قائمة المعاملات. عند استدعاء دالة غير متزامنة، awaitيجب كتابة الكلمة المفتاحية async/await قبل اسم الدالة للإشارة إلى احتمال تعليق التنفيذ أثناء استدعاء الدالة. أثناء تعليق الدالة، قد يُشغِّل البرنامج دالة متزامنة أخرى ضمن نفس البرنامج. تُمكِّن هذه الصيغة البرامج من تحديد نقاط التعليق المحتملة بوضوح وتجنب ما يُعرف بـ "هرم الهلاك" الناتج عن الاستخدام الواسع النطاق سابقًا لدوال الاستدعاء المغلقة. [ 99 ]
func downloadText ( name : String ) async -> String { let result = // ... بعض التعليمات البرمجية غير المتزامنة للتنزيل ... return result }let text = await downloadText ( "text1" )تسمح هذه async letالصيغة بتشغيل عدة دوال بالتوازي. awaitوتُستخدم مرة أخرى للإشارة إلى النقطة التي سيتوقف عندها البرنامج مؤقتًا في انتظار اكتمال الدوال asyncالتي تم استدعاؤها سابقًا.
// سيتم تنفيذ كل استدعاء من هذه الاستدعاءات للدالة downloadText بالتوازي. async let text1 = downloadText ( name : "text1" ) async let text2 = downloadText ( name : "text2" ) async let text3 = downloadText ( name : "text3" )let textToPrint = await [ text1 , text2 , text3 ] // يُعلق التنفيذ حتى يتم استدعاء جميع استدعاءات downloadText الثلاثة بنجاح. print ( textToPrint )يمكن إنشاء المهام ومجموعات المهام بشكل صريح لإنشاء عدد ديناميكي من المهام الفرعية أثناء وقت التشغيل:
let taskHandle = Task { await downloadText ( name : "someText" ) }let result = await taskHandle.valueتستخدم لغة Swift نموذج الممثل (Actor) لعزل الحالة القابلة للتغيير، مما يسمح لمهام مختلفة بتعديل الحالة المشتركة بطريقة آمنة. يتم تعريف الممثلين باستخدام actorالكلمة المفتاحية `on`، وهم أنواع مرجعية، مثل الفئات. لا يمكن إلا لمهمة واحدة الوصول إلى الحالة القابلة للتغيير للممثل في الوقت نفسه. يمكن للممثلين الوصول إلى حالتهم الداخلية وتعديلها بحرية، ولكن يجب على التعليمات البرمجية التي تعمل في مهام منفصلة وضع علامة على كل وصول باستخدام الكلمة awaitالمفتاحية `on` للإشارة إلى أنه يمكن تعليق التعليمات البرمجية حتى تنتهي المهام الأخرى من الوصول إلى حالة الممثل.
دليل الممثلين { var names : [ String ] = [] func add ( name : String ) { names . append ( name ) } }let directory = Directory ()// يتوقف تنفيذ الكود مؤقتًا حتى تنتهي المهام الأخرى من الوصول إلى الكائن. await directory.add ( name : " Tucker" ) print ( await directory.names )المكتبات، وقت التشغيل، التطوير
في أنظمة أبل، يستخدم Swift نفس بيئة التشغيل الخاصة بنظام Objective-C الحالي ، ولكنه يتطلب نظام iOS 7 أو macOS 10.9 أو أحدث. كما يعتمد على Grand Central Dispatch . [ 100 ] يمكن استخدام كود Swift وObjective-C في برنامج واحد، وبالتالي، يمكن استخدام كود C وC++ أيضًا. بدءًا من Swift 5.9، يمكن استخدام كود C++ مباشرةً من كود Swift. [ 101 ] في حالة Objective-C، يتمتع Swift بإمكانية وصول واسعة إلى نموذج الكائنات، ويمكن استخدامه لإنشاء فئات فرعية وتوسيعها واستخدام كود Objective-C لتوفير دعم البروتوكولات. [ 102 ] لا ينطبق العكس: لا يمكن إنشاء فئات فرعية من فئة Swift في Objective-C. [ 103 ]
لتسهيل تطوير هذه البرامج، وإعادة استخدام الشيفرة البرمجية الموجودة، يوفر Xcode 6 والإصدارات الأحدث نظامًا شبه آلي يُنشئ ويُحدّث ملف رأس وسيطًا لعرض شيفرة Objective-C لـ Swift. يأتي هذا النظام على شكل ملف رأس إضافي يُعرّف أو يستورد جميع رموز Objective-C التي تحتاجها شيفرة Swift الخاصة بالمشروع. عندئذٍ، يُمكن لـ Swift الإشارة إلى الأنواع والدوال والمتغيرات المُعلنة في تلك الاستيرادات كما لو كانت مكتوبة بلغة Swift. كما يُمكن لشيفرة Objective-C استخدام شيفرة Swift مباشرةً، وذلك باستيراد ملف رأس مُحدّث تلقائيًا يحتوي على تعريفات Objective-C لرموز Swift الخاصة بالمشروع. على سبيل المثال، يُمكن لملف Objective-C في مشروع مختلط يُسمى "MyApp" الوصول إلى فئات أو دوال Swift باستخدام الشيفرة #import "MyApp-Swift.h". ومع ذلك، لا تتوفر جميع الرموز من خلال هذه الآلية - فقد يؤدي استخدام ميزات خاصة بلغة Swift مثل الأنواع العامة، والأنواع الاختيارية غير الكائنية، والتعدادات المتطورة، أو حتى معرفات Unicode إلى جعل الرمز غير قابل للوصول إليه من Objective-C. [ 104 ]
تدعم لغة Swift بشكل محدود السمات ، وهي بيانات وصفية يقرأها بيئة التطوير، وليست بالضرورة جزءًا من الكود المُترجم. وكما هو الحال في Objective-C، تستخدم السمات @صيغةً معينة، ولكن المجموعة المتاحة حاليًا محدودة. ومن الأمثلة على ذلك @IBOutletالسمة `output`، التي تُحدد قيمةً معينةً في الكود كمنفذ ، متاح للاستخدام داخل Interface Builder (IB). والمنفذ هو أداة تربط قيمة العرض على الشاشة بكائن في الكود.
في الأنظمة غير التابعة لشركة آبل، لا تعتمد لغة Swift على بيئة تشغيل Objective-C أو مكتبات نظام آبل الأخرى؛ إذ تحل محلها مجموعة من تطبيقات Swift "Corelib". وتشمل هذه التطبيقات "swift-corelibs-foundation" التي تحل محل Foundation Kit ، و"swift-corelibs-libdispatch" التي تحل محل Grand Central Dispatch، و"swift-corelibs-xctest" التي تحل محل واجهات برمجة تطبيقات XCTest من Xcode . [ 105 ]
ابتداءً من عام 2019، ومع إصدار Xcode 11، أضافت Apple نموذجًا جديدًا رئيسيًا لواجهة المستخدم يُسمى SwiftUI. يحل SwiftUI محل نموذج Interface Builder القديم بنموذج تطوير تصريحي جديد. [ 106 ]
إدارة الذاكرة
تستخدم لغة Swift آلية عدّ المراجع التلقائي (ARC) لإدارة الذاكرة . يحتفظ كل مثيل من فئة أو دالة مغلقة بعداد مراجع يُسجّل عدد المراجع التي يحتفظ بها البرنامج. عندما يصل هذا العداد إلى الصفر، يتم تحرير المثيل. يُغني هذا التحرير التلقائي عن الحاجة إلى جامع البيانات المهملة، حيث يتم تحرير المثيلات بمجرد انتهاء الحاجة إليها.
قد تحدث حلقة مرجعية قوية إذا أشار مثيلان إلى بعضهما البعض بشكل مباشر (مثلاً، يشير A إلى B، ويشير B إلى A). ولأن عدد المراجع لأي من المثيلين لا يمكن أن يصل إلى الصفر، فإنهما لا يُحرران من الذاكرة، مما يؤدي إلى تسرب الذاكرة . توفر لغة Swift الكلمات المفتاحية `references` weakو` unownedreferences` لمنع الحلقات المرجعية القوية. تسمح هذه الكلمات المفتاحية بالإشارة إلى مثيل دون زيادة عدد المراجع الخاص به. weakيجب أن تكون المراجع متغيرات اختيارية، لأنها قابلة للتغيير nil. [ 107 ] محاولة الوصول إلى unownedقيمة تم تحريرها بالفعل تؤدي إلى خطأ وقت التشغيل.
يمكن أن يؤدي إغلاق داخل فئة ما إلى إنشاء حلقة مرجعية قوية من خلال التقاط المراجع الذاتية. ويمكن الإشارة إلى المراجع الذاتية التي يجب التعامل معها على أنها ضعيفة أو غير مملوكة باستخدام قائمة التقاط.
فئة الشخص {let name : Stringweak var home : Home ? // تم تعريفها كمرجع ضعيف لكسر حلقة المراجع. المراجع الضعيفة لا تزيد عدد المراجع للمثيل الذي تشير إليه.تهيئة ( الاسم : سلسلة نصية ) {اسم الذات = الاسم}deinit { print ( "تم إلغاء تهيئة \( name ) " ) }}فئة الصفحة الرئيسية {let address : Stringvar owner : Person ?دالة التهيئة ( العنوان : سلسلة نصية ، المالك : شخص ؟) {العنوان الذاتي = العنوانالمالك الذاتي = المالك}deinit { print ( "تم إلغاء تهيئة \( address ) " ) }}var stacy : Person ? = Person ( name : "Stacy" )var house21b : Home ? = Home ( address : "21b Baker Street" , owner : stacy )stacy ?. home = house21b // stacy و house42b يشيران الآن إلى بعضهما البعض.stacy = nil // أصبح عدد المراجع لـ stacy الآن 1، لأن house21b لا يزال يحتفظ بمرجع إليه.house21b = nil // ينخفض عدد المراجع الخاصة بـ house21b إلى 0، مما يؤدي بدوره إلى انخفاض عدد المراجع الخاصة بـ stacy إلى 0 لأن house21b كانت آخر حالة تحتفظ بمرجع قوي إلى stacy.// يطبع:// تم إلغاء تهيئة 21ب شارع بيكر// تم إلغاء تهيئة ستايسيتصحيح الأخطاء
يُعدّ نظام Swift عنصرًا أساسيًا نظرًا لقدرته على تصحيح الأخطاء بسلاسة وتشغيله ضمن بيئة التطوير، باستخدام حلقة قراءة-تقييم-طباعة (REPL)، مما يمنحه خصائص تفاعلية أقرب إلى قدرات البرمجة النصية في Python منها إلى لغات برمجة الأنظمة التقليدية . وقد تم تعزيز REPL بشكل أكبر من خلال بيئات تجريبية ( Playgrounds ) ، وهي واجهات تفاعلية تعمل ضمن بيئة Xcode أو تطبيق Playgrounds، وتستجيب لتغييرات التعليمات البرمجية أو مصحح الأخطاء بشكل فوري. [ 108 ] تتيح بيئات Playgrounds للمبرمجين إضافة تعليمات Swift البرمجية مع توثيق Markdown. ويمكن للمبرمجين تتبع تنفيذ التعليمات البرمجية وإضافة نقاط توقف باستخدام LLDB إما في وحدة تحكم أو بيئة تطوير متكاملة (IDE) مثل Xcode.
مقارنات مع لغات أخرى
تُعتبر لغة Swift لغة برمجة من عائلة لغة C ، وهي تشبه لغة C في نواحٍ عديدة:
- تظهر معظم المعاملات في لغة C أيضًا في لغة Swift، على الرغم من أن بعضها، مثل `f`،
+له سلوك مختلف قليلاً. على سبيل المثال، في Swift،+يُعالج `f` حالة تجاوز السعة، بينما&+يُستخدم `f` للدلالة على سلوك الالتفاف عند تجاوز السعة، وهو سلوك مشابه لسلوك لغة C. - تُستخدم الأقواس المعقوفة لتجميع العبارات.
- تُسند القيم للمتغيرات باستخدام علامة المساواة ، ولكن تتم مقارنتها باستخدام علامتي مساواة متتاليتين
===. ويُوفر عامل تطابق جديد للتحقق مما إذا كان عنصران من البيانات يشيران إلى نفس الكائن . - عبارات التحكم
while،ifوswitchمتشابهة، ولكنها تحتوي على وظائف موسعة، على سبيل المثال، وظيفةswitchتأخذ حالات غير عددية صحيحة، وتدعمwhileمطابقة الأنماط وفك التغليف المشروط للقيم الاختيارية، وتستخدم بناء الجملة.ifforforiin1...10 - تُستخدم الأقواس المربعة مع المصفوفات ، سواء لتعريفها أو للحصول على قيمة عند فهرس معين في إحداها.
كما أنها تشبه لغة Objective-C:
- أنواع الأرقام الأساسية:
Int, UInt, Float, Double - يتم توريث أساليب الفئة، مثل أساليب الكائن؛
selfفي أساليب الفئة، يكون اسم الفئة هو الفئة التي تم استدعاء الأسلوب عليها. - صيغة تعداد مماثلة
for...in
تشمل الاختلافات عن لغة Objective-C ما يلي:
- لا يشترط أن تنتهي العبارات بفواصل منقوطة (
;)، على الرغم من أنه يجب استخدامها للسماح بأكثر من عبارة واحدة في سطر واحد. - لا توجد ملفات رأسية.
- يستخدم استنتاج النوع .
- البرمجة العامة .
- الدوال هي كائنات من الدرجة الأولى .
- يمكن أن تحتوي حالات التعداد على بيانات مرتبطة بها ( أنواع البيانات الجبرية ).
- يمكن إعادة تعريف عوامل التشغيل للفئات ( تحميل عوامل التشغيل الزائد )، ويمكن تعريف عوامل تشغيل جديدة.
- تدعم السلاسل النصية نظام يونيكود بشكل كامل . يمكن استخدام معظم أحرف يونيكود في المعرفات أو المعاملات.
- لا يوجد معالجة للأخطاء . يقدم Swift 2 نموذجًا مختلفًا وغير متوافق لمعالجة الأخطاء. [ 109 ]
- تمت إزالة العديد من ميزات لغات عائلة C السابقة التي يسهل إساءة استخدامها:
- لا يتم عرض المؤشرات افتراضياً. لا يحتاج المبرمج إلى تتبع أسماء المؤشرات أو تحديدها للإشارة إليها أو فكّها.
- لا تُرجع عمليات الإسناد أي قيمة. وهذا يمنع الخطأ الشائع المتمثل في كتابة
i = 0بدلاً منi == 0(مما يؤدي إلى ظهور خطأ في وقت الترجمة). - لا حاجة لاستخدام
breakالعبارات داخلswitchالكتل. لا تنتقل الحالات الفردية إلى الحالة التالية إلا إذاfallthroughتم استخدام العبارة. - يتم دائمًا تهيئة المتغيرات والثوابت، ويتم دائمًا التحقق من حدود المصفوفة.
- تُعالج حالات تجاوز سعة الأعداد الصحيحة ، التي تؤدي إلى سلوك غير مُحدد للأعداد الصحيحة المُوقّعة في لغة C، كخطأ وقت التشغيل في لغة Swift. يُمكن للمبرمجين السماح بتجاوز السعة باستخدام عوامل التشغيل الحسابية الخاصة
&+`int`&-و`int`&*و`&/int` و` int`&%. تُعرّف الخاصيتان ` int`minو`maxint` في Swift لجميع أنواع الأعداد الصحيحة، ويمكن استخدامهما للتحقق من تجاوز السعة المُحتمل بأمان، بدلاً من الاعتماد على الثوابت المُعرّفة لكل نوع في المكتبات الخارجية. - إن صيغة العبارة الواحدة لـ
if"و"whileوالتي تسمح بحذف الأقواس حول العبارة، غير مدعومة. - لا يتم دعم التعداد على نمط لغة C
for (int i = 0; i < c; i++)، والذي يكون عرضة لأخطاء الإزاحة بمقدار واحد (بدءًا من Swift 3). [ 110 ] - لا يتم دعم عوامل الزيادة والنقصان قبل وبعد (
i++،--i...) (من Swift 3 فصاعدًا)، ويزداد الأمر سوءًا نظرًا لأن عبارات نمط Cforغير مدعومة أيضًا من Swift 3 فصاعدًا. [ 111 ]
التطوير والتنفيذات الأخرى
نظرًا لإمكانية تشغيل لغة Swift على نظام Linux، فإنها تُستخدم أحيانًا كلغة برمجة من جانب الخادم. [ 112 ] وقد تم تطوير بعض أطر عمل الويب، مثل Kitura من IBM (التي توقف تطويرها الآن)، و Perfect ، وVapor ، و Hummingbird .
كما أنشأت شركة آبل فريق عمل رسميًا بعنوان "واجهات برمجة تطبيقات الخادم"، [ 113 ] حيث يلعب أعضاء مجتمع مطوري لغة Swift دورًا محوريًا. [ 114 ]
يوجد تطبيق مجاني ثانٍ للغة Swift يستهدف Cocoa ، وبنية اللغة المشتركة لمايكروسوفت ( إطار عمل .NET ، المعروف الآن باسم .NET )، ومنصة Java و Android كجزء من برنامج Elements Compiler من شركة RemObjects Software . [ 115 ]
تم نقل مجموعات فرعية من لغة Swift إلى منصات إضافية، مثل Arduino [ 116 ] و Mac OS 9. [ 117 ]
انظر أيضاً
مراجع
- ↑ براءة اختراع أمريكية رقم 9329844
- ↑ "وصلت لغة Swift إلى الإصدار 1.0" . أبل. 9 سبتمبر 2014. تم الاطلاع عليه في 8 مارس 2015 .
- ↑ "الإصدار 6.3.3" . 30 يونيو 2026. تم الاطلاع عليه في 1 يوليو 2026 .
- ↑ "Swift, Objectively" . دكتور دوبز .
لغة Swift مملوكة ومغلقة: فهي تخضع لسيطرة شركة Apple بالكامل ولا يوجد تطبيق مفتوح المصدر لها.
- ↑ لاتنر، كريس (11 يونيو 2014). "ردًا على: [ LLVMdev ] [ cfe-dev ] [ إعلان ] وظائف شاغرة في فريق مُترجم لغة Swift في شركة Apple" . مؤرشف من الأصل في 14 يوليو 2014. تم الاطلاع عليه في 12 يونيو 2014.
لا شك أن الكثيرين منا يرغبون في أن يكون مفتوح المصدر وجزءًا من LLVM، لكن النقاش لم يبدأ بعد، ولن يبدأ لبعض الوقت.
- ↑ " الصفحة الرئيسية لكريس لاتنر" . كريس لاتنر. 3 يونيو 2014. تم الاطلاع عليه في 3 يونيو 2014.
لغة Swift هي ثمرة جهد دؤوب من فريق من خبراء اللغة، ومختصي التوثيق، وخبراء تحسين أداء المترجمات، ومجموعة داخلية بالغة الأهمية قامت بتجربة اللغة داخليًا وقدمت ملاحظاتها للمساعدة في صقل الأفكار واختبارها عمليًا. وبالطبع، استفادت اللغة بشكل كبير من الخبرات المكتسبة بصعوبة من العديد من اللغات الأخرى في هذا المجال، مستلهمةً أفكارًا من لغات مثل Objective-C وRust وHaskell وRuby وPython وC# وCLU، وغيرها الكثير.
- ١ ٢ لاتنر، كريس (٣ يونيو ٢٠١٤). "الصفحة الرئيسية لكريس لاتنر" . كريس لاتنر . تم الاطلاع عليه في ٣ يونيو ٢٠١٤. بدأت العمل على لغة برمجة سويفت في يوليو ٢٠١٠.
نفذتُ جزءًا كبيرًا من بنية اللغة الأساسية، ولم يكن يعلم بوجودها سوى عدد قليل من الناس. بدأ عدد قليل من الأشخاص الآخرين (المذهلين) بالمساهمة بجدية في أواخر عام ٢٠١١، وأصبحت محورًا رئيسيًا لمجموعة أدوات مطوري أبل في يوليو ٢٠١٣ [...] مستوحيًا الأفكار من لغات البرمجة
أوبجكتيف-سي
، وراست، وهاسكل، وروبي، وبايثون، وسي شارب، وسي إل يو، وغيرها الكثير مما يصعب حصره.
- ↑ "بناء دالة assert() في لغة Swift، الجزء 2: __FILE__ و __LINE__" . تم الاطلاع عليه بتاريخ 25 سبتمبر 2014 .
- ↑ "التأثيرات - مرجع لغة Rust" . doc.rust-lang.org . تم الاطلاع عليه في 2 مايو 2020 .
- ↑ "متأثر بوثائق - V" . github.com . تم الاطلاع عليه في 3 نوفمبر 2023 .
- ↑ "أسئلة وأجوبة حول لغة موجو" . modular.com . تم الاطلاع عليه بتاريخ 17 أغسطس 2025 .
- ↑ "لغة الكربون على GitHub" . github.com . تم الاطلاع عليه بتاريخ 17 أغسطس 2025 .
- ↑ لاردينوا، فريدريك (2 يونيو 2014). "أبل تطلق سويفت، لغة برمجة جديدة لكتابة تطبيقات iOS وOS X" . تيك كرانش . تم الاطلاع عليه في 7 سبتمبر 2022 .
- ↑ البرمجة الموجهة بالبروتوكولات في لغة Swift . شركة Apple Inc. على YouTube . مؤرشف من الأصل في 16 يوليو 2023. تم الاطلاع عليه في 18 يونيو 2015 .
- ↑ "المفاهيم مشابهة لسمات Rust، (أعتقد) بروتوكولات Swift و Haskel Type C... | Hacker News" . news.ycombinator.com .
- ↑ ويليامز، أوين (2 يونيو 2014). "عيد ميلاد تيم بيرنرز لي الستين: أبل تعلن عن سويفت، لغة برمجة جديدة لنظام iOS" . موقع The Next Web . تاريخ الاسترجاع: 2 يونيو 2014 .
- ↑ «لغة البرمجة الجديدة من آبل، سويفت، أصبحت الآن مفتوحة المصدر» . ذا فيرج . 3 ديسمبر 2015. تم الاطلاع عليه بتاريخ 5 ديسمبر 2015 .
- ↑ "أبل تفتح مصدر لغة سويفت في أحدث عرض لها للمؤسسات" . مجلة CIO. مدونات صحيفة وول ستريت جورنال . 3 ديسمبر 2015. تم الاطلاع عليه في 5 ديسمبر 2015 .
- 1 2 منصات حالة الاتحاد، الجلسة 102، مؤتمر مطوري أبل العالمي ، 2 يونيو 2014
- ↑ لغة البرمجة سويفت . أبل . 2 يونيو 2014. تم الاطلاع عليه في 2 يونيو 2014 .
- "التوثيق" . سويفت .
- ↑ "وصلت لغة سويفت إلى الإصدار 1.0" . 9 سبتمبر 2014. تم الاطلاع عليه في 10 سبتمبر 2014 .
- ↑ "ملاحظات إصدار Xcode 6.1" . 22 أكتوبر 2014. تم الاطلاع عليه في 23 يناير 2015 .
- ↑ "ملاحظات إصدار Xcode 6.3" . 8 أبريل 2015. تم الاطلاع عليه في 8 أبريل 2015 .
- ↑ "تطبيقات Swift 2 في متجر التطبيقات" . مدونة Swift . تم الاطلاع عليه في 13 مارس 2016 .
- ↑ "إصدار Swift 3.0!" . Swift.org . 13 سبتمبر 2016. مؤرشف من الأصل في 14 أكتوبر 2016. تم الاطلاع عليه في 26 أكتوبر 2016 .
- ↑ "نظرة على Swift 3 وتطلعات إلى Swift 4" . منتديات Swift . 29 يوليو 2016. تم الاطلاع عليه في 19 نوفمبر 2018 .
- ↑ "تطور لغة Swift" . تطور لغة Swift . تم الاطلاع عليه بتاريخ 19 نوفمبر 2018 .
- ↑ "إصدار Swift 4.0!" . Swift.org . 17 سبتمبر 2017. مؤرشف من الأصل في 28 مارس 2019. تم الاطلاع عليه في 1 مارس 2018 .
- ↑ "إصدار Swift 4.1!" . Swift.org . 29 مارس 2018. مؤرشف من الأصل في 25 أبريل 2019. تم الاطلاع عليه في 30 مارس 2018 .
- ↑ "تصنيفات ريدمونك للغات البرمجة: يناير 2018 - الأنظمة البيئية" . redmonk.com . 7 مارس 2018. تم الاطلاع عليه في 20 نوفمبر 2018 .
- ↑ كريمينك، تيد (25 مارس 2019). "تم إصدار Swift 5!" .
- ↑ كريمينك، تيد (20 سبتمبر 2019). "إصدار Swift 5.1!" . مؤرشف من الأصل في 26 فبراير 2022. تم الاطلاع عليه في 28 أكتوبر 2019 .
- ↑ هدسون، بول (6 يونيو 2021). "ما الجديد في Swift 5.5؟" . HackingWithSwift.com . Hacking with Swift . تم الاطلاع عليه في 8 يونيو 2021 .
- ↑ "إصدار Swift 5.9" . Swift.org . 18 سبتمبر 2023. تم الاطلاع عليه في 9 أكتوبر 2023 .
- ↑ بورلا، هولي (17 سبتمبر 2024). "الإعلان عن Swift 6" . Swift.org . تم الاطلاع عليه في 15 أكتوبر 2024 .
- ↑ بورلا، هولي (31 مارس 2025). "إصدار Swift 6.1" . swift.org . تم الاطلاع عليه في 29 أبريل 2025 .
- ↑ "استطلاع رأي مطوري ستاك أوفرفلو لعام 2015" . ستاك أوفرفلو .
- ↑ "نتائج استطلاع مطوري ستاك أوفرفلو لعام 2016" . ستاك أوفرفلو .
- ↑ "Swift.org والمصادر المفتوحة" . Swift.org . شركة آبل . تم الاطلاع عليه بتاريخ 25 فبراير 2019 .
- ↑ "تقديم بيئة اختبار IBM Swift Sandbox — Swift" . Swift . تم الاطلاع عليه في 5 ديسمبر 2015 .
- ↑ مايو، بنجامين (4 ديسمبر 2015). "اكتب كود Swift في متصفح الويب باستخدام IBM Swift Sandbox" . 9to5Mac . تم الاطلاع عليه في 5 ديسمبر 2015 .
- ↑ "بعد أن جعلت آبل لغة البرمجة مفتوحة المصدر، قامت آي بي إم بوضع برمجة سويفت في الحوسبة السحابية" . ZDNet . تم الاطلاع عليه في 5 ديسمبر 2015 .
- ↑ "إيقاف استخدام كتالوج حزم Swift وSwift Sandbox" . تم الاطلاع عليه بتاريخ 9 نوفمبر 2018 .
- ↑ "ملاعب Swift" . مطورو Apple . تم الاطلاع عليه في 19 يونيو 2016 .
- ↑ "ملاعب سويفت - معاينة" . أبل . تم الاطلاع عليه في 19 يونيو 2016 .
- ↑ مايو، بنجامين (13 يونيو 2016). "أبل تعلن عن Swift Playgrounds لأجهزة iPad في مؤتمر WWDC، وسيتم إطلاقها للجمهور في الخريف" . 9to5Mac . تم الاطلاع عليه في 19 يونيو 2016 .
- ↑ كونينغهام، أندرو (10 يناير 2017). "مبرمج مخضرم في شركة آبل ومبتكر لغة سويفت يترك آبل لينضم إلى تسلا" . آرس تكنيكا.
- ↑ ويرثيل، مايك (13 يناير 2017). "يقال إن تيد كريمنك، الرئيس الجديد لمشروع سويفت، يدير الأمور من وراء الكواليس منذ فترة" . AppleInsider.
- ↑ دانيال إران ديلجر (19 يونيو 2019). "مؤتمر WWDC19: كانت SwiftUI النجم الأكثر سطوعًا في مجرة من الأفكار الجديدة" . AppleInsider . تم الاطلاع عليه في 19 يوليو 2019 .
- ↑ "Swift.org - تنزيل Swift" . تم الاطلاع عليه في 21 يونيو 2020 .
- ↑ "مجموعات تطوير البرامج لنظام Android للغة Swift" . GitHub . تم الاطلاع عليه بتاريخ 10 سبتمبر 2021 .
- ↑ "إصدارات حزمة لغة Swift" . تم الاطلاع عليه بتاريخ 10 سبتمبر 2021 .
- ↑ "الإعلان عن حزمة تطوير البرامج Swift لنظام Android" . Swift.org . 24 أكتوبر 2025.
- ↑ ريدل (15 يناير 2020). "Swift لنظام Android: تجربتنا وأدواتنا" . ميديوم . تم الاطلاع عليه بتاريخ 20 أغسطس 2020 .
- ↑ أندرسون، تيم (30 مارس 2020). "الوعد بدعم رسمي مُخصّص للغة Swift لنظام Windows في الإصدار 5.3: Swift على المزيد من المنصات - بشرط عدم الحاجة إلى واجهة مستخدم رسومية" . ذا ريجستر . تاريخ الاسترجاع: 18 سبتمبر 2020 .
- ↑ "منفذ Swift لنظام Linux" . Swift.org . شركة Apple Inc. 3 ديسمبر 2015. تم الاطلاع عليه في 3 أغسطس 2016 .
- ↑ تيمر، جون (5 يونيو 2014). "نظرة سريعة على سويفت، لغة البرمجة الجديدة من آبل" . آرس تكنيكا . كوندي ناست . تم الاطلاع عليه في 6 يونيو 2014 .
- ↑ كريمينك، تيد (25 مارس 2019). "إصدار Swift 5!" . Swift.org . تم الاطلاع عليه في 28 مارس 2019 .
- ↑ "تنزيل Swift" . Swift.org . Apple . تم الاطلاع عليه في 15 ديسمبر 2020 .
- ↑ كريمنك، تيد (26 أبريل 2021). "إصدار Swift 5.4!" . Swift.org . أبل. مؤرشف من الأصل في 26 أبريل 2021. تم الاطلاع عليه في 26 أبريل 2021 .
- ↑ كريمنك، تيد (14 مارس 2022). "إصدار Swift 5.6!" . Swift.org . Apple . تم الاطلاع عليه في 14 مارس 2022 .
- ↑ "إصدار Swift 5.6.1 · apple/Swift" . GitHub .
- ↑ "إصدار Swift 5.6.2 · apple/Swift" . GitHub .
- ↑ "إصدار Swift 5.6.3 · apple/Swift" . GitHub .
- ↑ بورلا، هولي (12 سبتمبر 2022). "إصدار Swift 5.7!" . Swift.org . Apple . تم الاطلاع عليه في 23 سبتمبر 2022 .
- ↑ "إصدار Swift 5.7.1 · apple/Swift" . GitHub .
- ↑ "إصدار Swift 5.8 · apple/Swift" . GitHub .
- ↑ "إصدار Swift 5.8.1 · apple/swift" . GitHub . تم الاطلاع عليه في 14 يونيو 2023 .
- ↑ "إصدار Swift 5.9 · apple/swift" . GitHub . تم الاطلاع عليه في 18 سبتمبر 2023 .
- ↑ "إصدار Swift 5.9.1 · apple/swift" . GitHub . تم الاطلاع عليه في 19 أكتوبر 2023 .
- ↑ "إصدار Swift 5.9.2 · apple/swift" . GitHub . تم الاطلاع عليه بتاريخ 11 ديسمبر 2023 .
- ↑ بورلا، هولي (5 مارس 2024). "إصدار Swift 5.10" . Swift.org . تم الاطلاع عليه في 13 مارس 2024 .
- ↑ "إصدار Swift 5.10.1" . GitHub . تم الاطلاع عليه في 5 يونيو 2024 .
- ↑ "إصدار Swift 6.0" . GitHub . تم الاطلاع عليه في 17 سبتمبر 2024 .
- ↑ "إصدار Swift 6.1" . GitHub . تم الاطلاع عليه في 29 أبريل 2025 .
- ↑ "إصدار Swift 6.2" . GitHub . تم الاطلاع عليه في 17 سبتمبر 2025 .
- ↑ "إصدار Swift 6.3" . GitHub . تم الاطلاع عليه في 27 مارس 2026 .
- ↑ "الوثائق" . docs.swift.org . تم الاطلاع عليه بتاريخ 17 نوفمبر 2023 .
- ↑ "القضاء على تضارب البيانات باستخدام التزامن في Swift - مؤتمر WWDC22 - مقاطع فيديو" . شركة آبل . تم الاطلاع عليه بتاريخ 17 نوفمبر 2023 .
- 1 2 "الوثائق" . docs.swift.org . تم الاطلاع عليه في 15 أكتوبر 2023 .
- ↑ "الوثائق" . docs.swift.org . تم الاطلاع عليه بتاريخ 15 أكتوبر 2023 .
- ↑ "الإغلاقات - لغة برمجة سويفت (سويفت 5.5)" . docs.swift.org . تم الاطلاع عليه في 31 أغسطس 2021 .
- ↑ ماكومبر، كايل؛ ياسكيفيتش، يافيل؛ غريغور، دوغ؛ ماكول، جون. "عمليات إغلاق متعددة لاحقة" . غيت هاب . تم الاسترجاع في 19 أكتوبر 2020 .
- ↑ "الوثائق" . docs.swift.org . تم الاطلاع عليه بتاريخ 16 أكتوبر 2023 .
- ↑ "السلاسل والأحرف" . docs.swift.org . تم الاطلاع عليه في 16 أكتوبر 2023 .
- ↑ "التصريحات - لغة برمجة سويفت (سويفت 5.6)" . docs.swift.org . تم الاطلاع عليه بتاريخ 28 فبراير 2022 .
- ↑ "التحكم في الوصول" . لغة برمجة سويفت . مطورو أبل . تم الاطلاع عليه بتاريخ 25 أكتوبر 2016 .
- ↑ "الأنواع القابلة للتصفير" ، دليل برمجة C#، مايكروسوفت. مؤرشف في 21 فبراير 2017، في Wayback Machine .
- ↑ "الأنواع" . لغة برمجة سويفت . مطورو أبل . تم الاطلاع عليه في 16 يوليو 2014 .
- 1 2 "الفئات والهياكل" . لغة برمجة سويفت . مطورو أبل. مؤرشف من الأصل في 25 مارس 2016.
- ↑ جوهيت، فيل (14 فبراير 2015). "دراسة حالة أداء على Swift 1.1 وSwift 1.2 وObjective-C" . Medium . مؤرشف من الأصل في 12 ديسمبر 2023.
- ↑ بناء تطبيقات أفضل باستخدام أنواع القيم . أبل. مؤرشف من الأصل في 21 يونيو 2015.
- ↑ "الإضافات" . docs.swift.org . تم الاطلاع عليه بتاريخ 28 نوفمبر 2023 .
- ↑ "العمل مع البروتوكولات" . البرمجة باستخدام لغة Objective-C . أرشيف وثائق مطوري Apple. 17 سبتمبر 2014. مؤرشف من الأصل في 29 أبريل 2016.
- ↑ "مرجع بروتوكول NSCopying" . أبل .
- ↑ "إحصائيات مكتبة Swift القياسية" . swiftinit.org . Swiftinit . تم الاطلاع عليه في 2 أكتوبر 2023 .
- ↑ تومسون، مات (2 سبتمبر 2014). "تطبيقات بروتوكول Swift الافتراضي" . NSHipster .
- ↑ "swift-evolution/proposals/0304-structured-concurrency.md at main · apple/swift-evolution" . GitHub . تم الاطلاع عليه بتاريخ 16 أكتوبر 2023 .
- ↑ "swift-evolution/proposals/0296-async-await.md at main · apple/swift-evolution" . GitHub . تم الاطلاع عليه بتاريخ 16 أكتوبر 2023 .
- ↑ "هل تعمل التطبيقات المبنية على لغة Swift على نظام macOS 10.9/iOS 7 والإصدارات الأقدم؟" ، StackOverflow
- ↑ ساندبرغ، ألكسندر؛ بوريا، هولي (18 سبتمبر 2023). "إصدار Swift 5.9" . Swift.org . أبل . تم الاطلاع عليه في 9 أكتوبر 2023 .
- ↑ "كتابة فئات Swift باستخدام سلوك Objective-C" ، شركة Apple Inc.
- ↑ "نقل كود Objective-C الخاص بك إلى Swift" . وثائق مطوري Apple .
- ↑ "Swift و Objective-C في نفس المشروع" ، شركة أبل.
- ↑ "أبل: ابحث عن "corelib"" . GitHub .
- ↑ "Xcode - SwiftUI - مطورو Apple" . developer.apple.com . تم الاطلاع عليه في 1 فبراير 2021 .
- ↑ لانيير، برايان؛ غروف، جو. "سويفت المتوسطة" . أبل . تم الاسترجاع في 3 يوليو 2014 .
- ↑ ميتز، كيد. "لماذا يُصاب المبرمجون بالجنون بسبب لغة البرمجة الجديدة من آبل؟" . وايرد . تم الاطلاع عليه في 16 يوليو 2014 .
- ↑ "معالجة الأخطاء في لغة Swift" . stackoverflow.com .
- ↑ "apple/swift-evolution" . GitHub . تم الاطلاع عليه في 4 أبريل 2016 .
- ↑ "apple/swift-evolution" . GitHub . تم الاطلاع عليه في 4 أبريل 2016 .
- ↑ باربوسا، جريج (22 فبراير 2016). "شركة IBM تُطلق Swift على الحوسبة السحابية، وتُصدر إطار عمل الويب Kitura المكتوب بلغة برمجة Apple" . 9to5Mac . تاريخ الاسترجاع: 16 مايو 2016 .
- ↑ "مجموعة عمل واجهات برمجة تطبيقات الخادم" . Swift.org . 25 أكتوبر 2016. تم الاطلاع عليه في 28 أكتوبر 2016 .
- ↑ "Swift.org" . Swift.org . مؤرشف من الأصل في 10 مايو 2021. تم الاطلاع عليه في 28 أكتوبر 2016 .
- ↑ "مترجم عناصر RemObjects" . تم الاطلاع عليه بتاريخ 17 يناير 2016 .
- ↑ "Swift for Arduino" .
- ^ روز، الأردن (1 أبريل 2020). "سويفت على نظام التشغيل Mac OS 9" . -dealloc .
روابط خارجية
- الموقع الرسمي

- مطور لغة Swift في شركة Apple
- شفرة المصدر بلغة Swift على GitHub
- سويفت (لغة برمجة)
- برامج شركة أبل
- لغات البرمجة
- لغات البرمجة المترجمة
- لغات البرمجة عالية المستوى
- لغات البرمجة التصريحية
- لغات البرمجة الكائنية التوجه
- اللغات الوظيفية
- لغات برمجة مطابقة الأنماط
- لغات البرمجة التي تم إنشاؤها في عام 2014
- لغات البرمجة ذات الكتابة الثابتة
- لغات برمجة الأنظمة
- برامج مجانية متعددة المنصات
- برنامج يستخدم ترخيص أباتشي
