كتاب "سويفت. أساسيات تطوير تطبيقات iOS و iPadOS و macOS. 5th ed. مكمل ومنقح "

صورة مرحبا ، habrozhiteli! لغة سويفت صغيرة ، فهي تنمو وتتطور وتتغير ، على الرغم من أن النهج الأساسية للبرمجة والتطوير قد تم تشكيلها بالفعل. في الإصدار الخامس والخامس من الكتاب ، تمت مراجعة الجزء الأول من الكتاب بالكامل ، مما يجعل التعرف على لغة سويفت أكثر راحة ، ويتم تحديث النص بالكامل وفقًا لقدرات Swift 5. خلال التواصل الطويل والمثمر مع القراء ، ظهرت العديد من الأفكار ، بفضل الإصدار الجديد حتى مواد تعليمية أكثر فائدة وغنية. لن تتعلم الآن Swift فحسب ، بل ستحصل أيضًا على معلومات أولية حول مبادئ تطوير التطبيقات الكاملة. يتغير عالم Swift باستمرار ، والأشخاص الذين لديهم مخزون كبير من المعرفة والخبرة غير موجودون حتى الآن بسبب عصر اللغة ، بحيث يمكنك أن تصبح أحد أوائل المتخصصين.

مقتطفات. الفصل 6. Tuples


ربما لم تصادف أبدًا مفهومًا مثل tuples في البرمجة ، ومع ذلك ، فهذه إحدى الميزات المفيدة جدًا المتوفرة في Swift. Tuples ، على سبيل المثال ، يمكن استخدامها للعمل مع الإحداثيات. موافق ، إنه من الأنسب استخدام بنية (س ، ص ، ي) مكتوبة في متغير واحد بدلاً من إنشاء متغير منفصل لكل محور إحداثي.

6.1. أساسيات Tuple


tuple هو كائن يقوم بتجميع قيم الأنواع المختلفة ضمن قيمة مركبة واحدة.

Tuples هي أسهل طريقة يمكن لـ Swift من خلالها الجمع بين قيم الأنواع العشوائية. قد يكون لكل قيمة فردية في المجموعة نوع البيانات الخاص بها ، والذي لا يعتمد على الآخرين بأي طريقة.

موكب حرفي


يمكن إنشاء tuple باستخدام الحرفي tuple .

موجز

(_1, _2, ..., _N) 

• value: أي - القيمة التالية لنوع بيانات تعسفي ، مضمّن في المجموعة.

حرف tuple يُرجع القيمة المحددة فيه على أنه tuple. الحرفي محاط بأقواس ويتألف من مجموعة من القيم المستقلة مفصولة بفواصل. يمكن أن يكون عدد العناصر تعسفيًا ، لكن لا يوصى باستخدام أكثر من سبعة.

ملاحظة

علاوة على النص ، سيكون هناك عدد كبير من كتل بناء الجملة. يصفون كيف يمكن استخدام المنشآت المعنية في برامج حقيقية. قبل المتابعة إلى هذه الكتل ، من الضروري وصف بنية هذه الكتلة ، وكذلك العناصر المستخدمة.

سيحدد السطر الأول دائمًا بناء الجملة نفسه الذي يصف استخدام البنية في رمز البرنامج. في هذه الحالة ، يمكن استخدام العناصر الشرطية (على سبيل المثال ، value_1 ، value_2 و value_N في بناء الجملة أعلاه). عادة ما تكون مكتوبة في شكل نص لفهم الغرض منها.

قد يتبع الوصف التفصيلي للعناصر الشرطية. في بعض الحالات ، يمكن تجميع العناصر (كما هو الحال في بناء الجملة أعلاه ، حيث يتم بدلاً من العناصر value_1 ، value_2 ، وما إلى ذلك ، وصف قيمة عنصر ، تنطبق متطلباتها على جميع العناصر التي تحمل اسمًا معينًا).

بعد اسم العنصر الشرطي ، يمكن الإشارة إلى نوع البيانات الخاص به. علاوة على ذلك ، إذا كان يجب استخدام قيمة محددة لنوع معين (على سبيل المثال ، سلسلة ، رقمية ، منطقية ، إلخ.) كعنصر ، فسيتم فصل النوع بنقطتين (:). ومع ذلك ، إذا كان بالإمكان استخدام تعبير كعنصر (على سبيل المثال ، a + b أو r> 100) ، فسيتم الإشارة إلى الكتابة بعد شرطة الزاوية والقوس اليمنى التي تمثل السهم (->). يمكن تعريفه كواحد (على سبيل المثال ، Int) ، والعديد من أنواع البيانات (على سبيل المثال ، Int ، String).

يستخدم بناء الجملة أعلاه أي كمؤشر لنوع البيانات. أي تقف على أي نوع البيانات. في عملية التعلم ، سوف تواجه أنواعًا أكثر وأكثر يمكن تحديدها في كتلة بناء الجملة هذه.

يمكن اتباع وصف مفصل للبناء ، وكذلك مثال على استخدامه.
أنصحك بوضع إشارة مرجعية على هذه الصفحة حتى إذا لزم الأمر
دائما أعود هنا.
يتم تخزين tuple في المتغيرات والثوابت بنفس الطريقة التي يتم بها تخزين قيم أنواع البيانات الأساسية.
موجز

 let  = (_1, _2, ..., _N) var  = (_1, _2, ..., _N) 

التصريح عن متغير وثابت وتهيئته بحرف tuple يتكون من N عناصر كقيمة. لكتابة tuple إلى متغير ، يجب عليك استخدام عبارة var ، وللكتابة إلى ثابت ، يجب عليك استخدام عبارة let.
النظر في المثال التالي. نعلن عن ثابت ونبدأ بتكوينه مع مجموعة مكونة من ثلاثة عناصر من النوع: Int و String و Bool (سرد 6.1).

القائمة 6.1

 let myProgramStatus = (200, "In Work", true) myProgramStatus // (.0 200, .1 "In Work", .2 true) 

في هذا المثال ، myProgramStatus عبارة عن ثابت يحتوي على tuple كقيمة تصف حالة برنامج معين ويتكون من ثلاثة عناصر:

  • 200 - عدد صحيح من النوع Int ، رمز حالة البرنامج ؛
  • "في العمل" - سلسلة حرفية من النوع String ، وصف نصي لحالة البرنامج ؛
  • صحيح - قيمة منطقية من نوع Bool ، والقدرة على مواصلة تشغيل البرنامج.

تجمع هذه المجموعة قيم ثلاثة أنواع مختلفة من البيانات ضمن ثابت واحد ثابت.

نوع البيانات Tuple


ولكن إذا قام tuple بتجميع قيم أنواع البيانات المختلفة في واحد ، فما هو نوع بيانات tuple نفسه والمعلمة التي تخزن قيمتها؟

نوع بيانات tuple هو تسلسل ثابت ومرتب لأسماء أنواع البيانات لعناصر tuple.
موجز

 (____1, ____2, ..., ____N) 

يتم إحاطة نوع البيانات بين قوسين ، ويتم فصل أسماء أنواع العناصر بفواصل. يجب أن يتوافق ترتيب أسماء الأنواع بالضرورة مع ترتيب العناصر في المجموعة.

مثال


 (Int, Int, Double) 

نوع البيانات الخاص بتطبيق myProgramStatus من سرد 6.1 هو (Int ، String ، Bool). يتم تعيين نوع البيانات ضمنيًا ، حيث يتم تحديدها تلقائيًا استنادًا إلى عناصر المجموعة. نظرًا لأن ترتيب تحديد أنواع البيانات يجب أن يتطابق مع ترتيب العناصر في المجموعة ، فإن النوع (Bool ، String ، Int) يختلف عن (Int ، String ، Bool).

سرد 6.2 يقارن أنواع البيانات من tuples المختلفة.

القائمة 6.2

 var tuple1 = (200, "In Work", true) var tuple2 = (true, "On Work", 200) print( type(of:tuple1) == type(of:tuple2) ) 

وحدة التحكم

 false 

لمقارنة أنواع بيانات tuples ، يتم استخدام القيم التي يتم إرجاعها بواسطة نوع الوظيفة العامة (من :) ، والتي تحدد نوع الكائن الذي تم تمريره إليها.
افترض أنه في المجموعة myProgramStatus ، يجب أن يكون العنصر الأول هو قيمة Float بدلاً من عدد صحيح. في هذه الحالة ، يمكنك تحديد نوع بيانات المجموعة بشكل صريح (نقطتان بعد اسم المعلمة) (سرد 6.3).

القائمة 6.3

 //       let floatStatus: (Float, String, Bool) = (200.2, "In Work", true) floatStatus // (.0 200.2, .1 “In Work”, .2 true) 

أنت لا تقتصر على أي عدد محدد من العناصر tuple. يمكن أن تحتوي المجموعة على أكبر عدد ممكن من العناصر (ولكن تذكر أنه لا يوصى باستخدام أكثر من سبعة عناصر). توضح القائمة 6.4 مثالًا لإنشاء مجموعة مكونة من أربعة عناصر من نفس النوع. يستخدم اسم مستعار لنوع البيانات Int ، وهو غير محظور.

القائمة 6.4

 //     Int typealias numberType = Int //       let numbersTuple: (Int, Int, numberType, numberType) = (0, 1, 2, 3) numbersTuple // (.0 0, .1 1, .2 2, .3 3) 

6.2. التفاعل مع العناصر tuple


الهدف من tuple ليس فقط إعداد وتخزين مجموعة معينة من القيم ، ولكن أيضًا للتفاعل مع هذه القيم. في هذا القسم ، سنناقش كيفية التفاعل مع قيم العناصر tuple.

تهيئة القيم للمعلمات


يمكنك إعلان معلمات جديدة بتعبير واحد وتهيئة قيم جميع عناصر المجموعة. للقيام بذلك ، بعد الكلمة الأساسية var (أو اسمح ، إذا أعلنت الثوابت) بين قوسين وفاصلة ، يجب عليك تحديد أسماء المعلمات الجديدة ، وبعد أن يقوم مشغل التهيئة ، بتمرير الصفوف. لاحظ أن عدد المعلمات المعلنة يجب أن يتطابق مع عدد عناصر tuple (إدخال 6.5).

القائمة 6.5

 //      var (statusCode, statusText, statusConnect) = myProgramStatus //   print("  — \(statusCode)") print("  — \(statusText)") print("   — \(statusConnect)") 

وحدة التحكم:

 200In Worktrue 

باستخدام بناء الجملة هذا ، يمكنك بسهولة تهيئة القيم التعسفية لعدة معلمات دفعة واحدة. للقيام بذلك ، على الجانب الأيمن من التعبير ، بعد عامل التهيئة ، من الضروري عدم تمرير المعلمة التي تحتوي على tuple ، ولكن tuple الحرفي (سرد 6.6).

القائمة 6.6

 /*         */ var (myName, myAge) = ("", 140) //    print("  \(myName),   \(myAge) ") 

وحدة التحكم:

   ,   140  

تتم تهيئة المتغيرات myName و myAge مع القيم المقابلة لعناصر tuple (Troll ، 140). باستخدام بناء الجملة هذا ، يمكنك تجاهل عناصر tuple التعسفي. للقيام بذلك ، يجب عليك تحديد حرف الشرطة السفلية كاسم للمتغير المطابق للعنصر المراد تجاهله (إدخال 6.7).

القائمة 6.7

 /*      */ var (statusCode, _, _) = myProgramStatus 

نتيجة لذلك ، تتم كتابة قيمة العنصر الأول من المجموعة ، myProgramStatus ، إلى متغير statusCode. سيتم تجاهل القيم الأخرى.

ملاحظة

تشير الشرطة السفلية في Swift إلى تجاهل المعلمة. ليس هذا هو المثال الوحيد الذي يمكن استخدامه فيه. في المستقبل ، عند دراسة مادة الكتاب ، ستقابله أكثر من مرة.

الوصول إلى العناصر tuple من خلال فهارس


يحتوي كل عنصر من عناصر المجموعة ، بالإضافة إلى القيمة ، على فهرس عدد صحيح يمكن استخدامه للوصول إلى هذا العنصر. يتم ترتيب الفهارس دائمًا بالترتيب ، بدءًا من الصفر. وبالتالي ، في مجموعة العناصر N ، سيكون فهرس العنصر الأول هو 0 ، ويمكن الوصول إلى الأخير باستخدام الفهرس N-1.

عند الوصول إلى عنصر واحد ، تتم الإشارة إلى الفهرس من خلال النقطة بعد اسم المعلمة التي يتم تخزينها. توضح القائمة 6.8 مثالًا على الوصول إلى العناصر الفردية للكلمة.

القائمة 6.8

 //      print("   — \(myProgramStatus.0)") print("   — \(myProgramStatus.1)") print("    — \(myProgramStatus.2)") 

وحدة التحكم:

 200In Worktrue 

الوصول إلى العناصر tuple من خلال الأسماء


بالإضافة إلى الفهرس ، يمكن تعيين اسم فريد لكل عنصر من عناصر المجموعة. أسماء العناصر غير مطلوبة ويتم استخدامها فقط من أجل راحة استخدام المجموعات. يمكن إعطاء الأسماء لكل من العناصر وأجزاء منها. يمكن تعريف اسم العنصر بكلٍّ من الحرف الحرفي وتحديد نوعه بشكل صريح.

توضح القائمة 6.9 مثالًا على تحديد أسماء العناصر tuple من خلال حرفي.

القائمة 6.9

 let statusTuple = (statusCode: 200, statusText: "In Work", statusConnect: true) 

يمكن استخدام أسماء العناصر المحددة للحصول على قيم هذه العناصر. في هذه الحالة ، يتم استخدام بناء الجملة نفسه عند الوصول إلى الفهارس ، وعندما يتم تحديد الفهرس خلال النقطة بعد اسم المعلمة. تحديد الأسماء لا يمنعك من استخدام الفهارس. يمكن دائمًا استخدام الفهارس في المجموعة.

توضح القائمة 6.10 كيفية استخدام أسماء العناصر بالاقتران مع الفهارس.

ادراج 6.10

 //      print("   — \(statusTuple.statusCode)") print("   — \(statusTuple.statusText)") print("    — \(statusTuple.2)") 

وحدة التحكم:

 200In Worktrue 

يعد الوصول إلى العناصر التي تستخدم أسماء أكثر ملاءمة ومرئية من الوصول من خلال الفهارس.
كما ذكرنا سابقًا ، يمكن تحديد أسماء العناصر ليس فقط بالقيمة الحرفية للكلمة ، ولكن أيضًا عند تحديد نوع البيانات بشكل صريح. سرد 6.11 يوضح المثال المقابل.

ادراج 6.11

 /*          */ let anotherStatusTuple: (statusCode: Int, statusText: String, statusConnect: Bool) = (200, "In Work", true) //    anotherStatusTuple.statusCode // 200 

تحرير الصفوف


بالنسبة إلى tuples من نفس النوع ، يمكن إجراء عملية تهيئة قيمة tuple إلى أخرى. النظر في المثال في قائمة 6.12.

ادراج 6.12

 var myFirstTuple: (Int, String) = (0, "0") var mySecondTuple = (100, "") //       myFirstTuple = mySecondTuple myFirstTuple // (.0 100, .1 "") 

لدى tuples myFirstTuple و mySecondTuple نفس نوع البيانات ، لذلك يمكن تهيئة قيمة أحدهما لآخر. يتم تعيين النوع الأول بشكل صريح ، والثاني من خلال القيمة التي تمت تهيئتها.
يمكن استخدام الفهارس والأسماء لتغيير قيم العناصر الفردية في الطبقة (سرد 6.13).

القائمة 6.13

 //   var someTuple = (200, true) //     someTuple.0 = 404 someTuple.1 = false someTuple // (.0 404, .1 false) 

Tuples واسع الانتشار في سويفت. على سبيل المثال ، من خلال مساعدتهم ، يمكنك بسهولة عدم إرجاع قيمة واحدة ولكن عدة قيم من وظيفتك (سنتعرف على الوظائف لاحقًا).

ملاحظة


لا تسمح لك Tuples بإنشاء هياكل بيانات معقدة ، والغرض الوحيد منها هو تجميع مجموعة معينة من المعلمات غير المتجانسة أو المشابهة ونقلها إلى الموقع المطلوب. لإنشاء هياكل معقدة ، يجب عليك استخدام أدوات البرمجة الموجهة للكائنات (OOP) ، وبشكل أكثر تحديدًا ، الفئات أو الهياكل. سنتعرف عليهم لاحقًا.

»يمكن الاطلاع على مزيد من المعلومات حول الكتاب على موقع الناشر
» المحتويات
» مقتطفات

خصم 25 ٪ على كوبون Swabbrookers - سويفت

عند دفع النسخة الورقية من الكتاب ، يتم إرسال كتاب إلكتروني عبر البريد الإلكتروني.

Source: https://habr.com/ru/post/ar469187/


All Articles