البحث الاختياري
جزء من قسم المنطق والتدفق في رحلة Swift على Coddy — الدرس 13 من 56.
تُعيد فهارس القاموس دائمًا Optional: القيمة عندما يكون المفتاح موجودًا، و nil عندما لا يكون موجودًا. تُجبرك Swift على التعامل مع كلتا الحالتين.
let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p) // Optional(1)ثلاث طرق برمجية شائعة للتعامل مع الـ optional. اختر الطريقة التي تناسب الموقف.
1. if let: تعامل مع كلا الفرعين بشكل صريح:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. عامل دمج القيم الفارغة (nil-coalescing) ??: توفير قيمة بديلة في نفس السطر:
let p = prices["olive"] ?? 0 // 03. subscript مع قيمة افتراضية: نتيجة مماثلة، لكن القيمة الافتراضية تبقى أيضًا في مكانها إذا قمت بالكتابة مرة أخرى إلى ذلك المفتاح:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]التحدي
سهلالقاموس prices معطى. اقرأ سطراً واحداً من المدخلات: قائمة مفصولة بفاصلة من العناصر التي يريد المستخدم شراءها.
لكل عنصر، وبترتيب المدخلات، ابحث عنه في prices. اطبع سطراً واحداً لكل عنصر:
<item> @ <price>عندما يكون العنصر موجوداً في القاموس<item> not soldبخلاف ذلك
بعد سرد كل عنصر، اطبع سطراً أخيراً: Total: <sum>. تعامل مع العناصر المفقودة على أن تكلفتها 0 باستخدام عامل دمج القيم الفارغة (nil-coalescing operator).
للمدخلات apple,bread,olive,milk، المخرجات هي:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8ورقة مرجعية
تُعيد معاملات الوصول للقاموس (Dictionary subscripts) قيمة من نوع Optional — القيمة إذا كان المفتاح موجوداً، و nil إذا لم يكن كذلك.
1. if let — التعامل مع كلا الفرعين:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. دمج القيم الفارغة (Nil-coalescing) ?? — توفير قيمة بديلة:
let p = prices["olive"] ?? 0 // 03. معامل الوصول مع قيمة افتراضية (Subscript with default) — قيمة بديلة تعمل أيضاً عند الكتابة:
var counts = ["a": 2]
counts["b", default: 0] += 1 // ["a": 2, "b": 1]جرّب بنفسك
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// مهام: البحث لكل عنصر؛ طباعة '@ السعر' أو 'غير مباع'؛ الجمع باستخدام ?? 0
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق والتدفق
1النصوص بعمق
العد والفهارسحالة الأحرف وإزالة الفراغاتالبحث في النصوصتقسيم ودمج النصوصاستبدال النصوص الفرعيةمراجعة - التحقق من اسم المستخدم4المجموعات
إنشاء المجموعاتالاتحاد والتقاطعالطرح والفرق المتماثلالمجموعات الجزئية والشاملةمراجعة - تصفية الـ Tag7مشروع - متتبع العادات
نظرة عامة على المشروعتحديد كمكتمل2النطاقات والخطوات
المغلقة مقابل نصف المفتوحةالخطوة (Stride)دوال النطاقاتالنطاقات في Switchملخص - شبكة التقويم5الدوال من الرتبة العليا - الجزء الأول
MapFilterReduceربط Map و Filter و Reduceمراجعة - إحصائيات الكلمات