iOS / Swift / قيم Swift وملكية SwiftUI / الدرس 1
قيم Swift والقيم الاختيارية وبيئة iOS
حدّد حدود اللغة والمنصة ثم عالج الغياب دون اختراع قيمة مجال تبدو صحيحة.
في هذه الصفحة
أهداف الدرس
- افصل Swift عن هدف التطبيق
- اختر let وvar بحسب نية التعديل
- مثّل الغياب باستخدام Optional
افصل Swift عن هدف التطبيق
Swift لغة برمجة، وSwiftUI إطار واجهات من Apple، ويعتمد تطبيق iOS أيضا على SDK وهدف النشر والقدرات وإعداد التوقيع. لا يحتاج تحويل قيمة نقي إلى محاكي، بينما تحتاج شاشة SwiftUI تفاعلية إلى بيئة تطبيق. سجّل Xcode المختار ونمط لغة Swift قبل تشخيص التوافق أو أخطاء التزامن. تعتمد الدورة خط أساس تعليمي iOS 17 أو أحدث لمناقشة Observation وNavigationStack دون ادعاء دعم كل تغير لاحق في SDK. لا تحوي بيئة التأليف Swift أو أدوات Apple، لذا تبقى الأمثلة غير منفذة وتحمل runnable:false.
اختر let وvar بحسب نية التعديل
لا يمكن إعادة إسناد ارتباط let، بينما يسمح var بذلك. تضيف أنواع القيم والمراجع بعدا آخر؛ فمرجع ثابت لكائن صنف لا يجمّد تلقائيا خصائصه القابلة للتعديل. فضّل قيما محلية ثابتة حتى تحتاج العملية إلى تغيير فعلي. يحفظ استنتاج النوع الأنواع الساكنة ولا يحوّل المتغير إلى نوع ديناميكي. سمّ المقادير بمعناها ووحدتها مثل durationSeconds أو priceCents. يميز المترجم العدد من النص لكنه لا يستنتج اختلاف مقدارَي عمل من نوع العدد نفسه ما لم يظهر النموذج الفرق.
مثّل الغياب باستخدام Optional
تحوي القيمة الاختيارية قيمة مغلفة أو غيابا. وهي لا تساوي نصا فارغا أو صفرا أو مجموعة فارغة. يستخدم المقتطف الأول الربط الاختياري لاستخراج عدد مقاعد موجب موجود فقط. يعيد فشل التحليل والعدد غير الموجب غياب القيمة المقبولة ضمن هذا العقد الضيق عمدا. ويمكن لمحلّل أغنى تمييز فئات الفشل لتحسين الرسائل. أما الاستخراج القسري فيؤكد الوجود فقط ولا يفحص النطاق أو يشرح رفض المدخل.
func positiveSeats(_ text: String) -> Int? {
guard let value = Int(text), value > 0 else { return nil }
return value
}
print(positiveSeats("4") ?? -1)
print(positiveSeats("0") ?? -1)
4
-1
تستعمل القيمة البديلة -1 لإظهار الغياب في المثال فقط. ليست عددا صحيحا للمقاعد ولا قيمة رمزية موصى بها للمجال.
استخدم البدائل حين يتفق المعنى فقط
يوفر عامل التعويض عن nil قيمة بديلة عند الغياب. يستعمله المقتطف الثاني لتسمية عرض، حيث Guest قرار عرض مقصود. ولا يناسب البديل نفسه معرّف طلب لأنه يخترع هوية تبدو معقولة. يستطيع التسلسل الاختياري القراءة بأمان عبر قيمة غائبة، لكنه قد يخفي اعتمادا مفقودا إذا كانت العملية لازمة. اسأل هل الغياب طبيعي أم معيب أم علامة خلل في التطبيق، ثم اختر نوع نتيجة وتجربة يحفظان الفرق.
func greeting(_ name: String?) -> String {
"Hello, \(name ?? "Guest")"
}
print(greeting(nil))
print(greeting("Mira"))
Hello, Guest
Hello, Mira
يدرج استيفاء النص القيمة في العبارة. يبقى الاسم الفارغ غير nil فارغا لأن البديل يعالج الغياب فقط.
أبق تحليل البيانات الخارجية عند الحدود
توفر حقول النص وJSON والملفات والعناوين بيانات تحتاج إلى تفسير قبل أن تصبح حالة مجال. حلّل مرة واحدة بقاعدة موثقة وأتح نتيجة محددة النوع للواجهة. تجنب توزيع الاستخراج القسري في أجسام الواجهات، حيث يتحول المدخل المعيب إلى فشل عرض. قرّر قبول المسافات والإشارات والأصفار البادئة والأرقام المحلية بدلا من افتراض تطابق كل نص يشبه العدد. تسهّل لوحة المفاتيح الرقمية الإدخال لكنها لا تتحقق من اللصق أو القيم البرمجية. تلميحات العرض وقبول المجال عقدان مختلفان.
احصر الدليل فيما فُحص فعلا
لا يثبت الناتج المتوقع الصحيح لدالة نقية تثبيت iOS أو سلوك الإدخال أو الإتاحة أو تكامل القدرات الأصلية. افحص الدوال في بيئة تطوير معزولة بأدوات Swift المتاحة واختبر حدود الواجهة والجهاز مستقلة. احفظ عينات مصطنعة وسجّل نمط المترجم وSDK والهدف عند الإبلاغ عن عيب. لا تثبّت تطبيقا أو تشغله على حسابات حقيقية لمجرد توضيح محلّل صغير. تبلغ الدورة عن فحص المحتوى والترجمة منفصلا عن تنفيذ SDK الذي لم يتوفر أثناء التأليف.
الأخطاء الشائعة وإصلاحها
يتوقف الاستخراج القسري للقيمة الاختيارية
- لماذا يحدث؟
- أكد البرنامج الوجود دون إثباته.
- كيف تصلحه؟
- استخدم الربط الاختياري وأعد فشلا أو بديلا ذا معنى.
- كيف تتجنب تكراره؟
- اختبر الغياب والمدخلات المعيبة عند الحدود.
يتحول المعرّف الغائب إلى Guest
- لماذا يحدث؟
- أعيد استعمال بديل عرض كقاعدة مجال.
- كيف تصلحه؟
- ارفض الهوية المفقودة أو نمذج الغياب صراحة.
- كيف تتجنب تكراره؟
- سمّ دوال التطبيع بحسب عقدها الحقيقي.
يُبلغ عن مقتطف Swift كبناء iOS
- لماذا يحدث؟
- عُمّم فهم اللغة إلى أثر منصة.
- كيف تصلحه؟
- اذكر متطلبات البيئة غير المنفذة وافحص الأهداف منفصلة.
- كيف تتجنب تكراره؟
- أرفق نطاق التنفيذ بكل ادعاء تحقق.
اختبر فهمك
1. ما الفرق بين nil والنص الفارغ في greeting؟
اعرض الحل المشروح
تستدعي nil البديل Guest، أما النص الفارغ فقيمة موجودة وتنتج تحية بلا اسم. إذا احتاج الفراغ إلى بديل فأضف قاعدة تطبيع صريحة مستقلة واختبرها. لا تفترض أن Optional يتحقق من محتوى النص.
2. هل تعيد positiveSeats القيمة -1 للفشل في حالة التطبيق؟
اعرض الحل المشروح
فضّل Optional أو نتيجة فشل منظمة. قد تدخل القيمة الرمزية الحساب أو تظهر كمقدار حقيقي. تجعل -1 في المثال nil قابلة للطباعة فقط ويجب أن تبقى خارج قيم المجال. ويمكن لخطأ منظم فصل فشل الصياغة عن النطاق.
أهم ما تعلمته
- افصل Swift عن هدف التطبيق
- احصر الدليل فيما فُحص فعلا