تحويل الأنواع
جزء من قسم الأساسيات في رحلة Swift على Coddy — الدرس 34 من 86.
بما أن readLine() تعيد String?، فستحتاج غالباً إلى تحويل تلك السلسلة النصية إلى رقم لإجراء العمليات الحسابية. تتطلب Swift تحويل النوع (type conversion) الصريح — فهي لن تقوم تلقائياً بتحويل السلسلة النصية إلى عدد صحيح (integer) أو عدد عشري (double).
لتحويل سلسلة نصية إلى عدد صحيح، استخدم المُهيئ Int(). ولأن عملية التحويل قد تفشل (فقد تحتوي السلسلة النصية على أحرف بدلاً من أرقام)، فإنها تُرجع قيمة اختيارية (optional):
let input = "42"
if let number = Int(input) {
print(number + 10) // المخرجات: 52
}للأرقام العشرية، استخدم Double():
let priceString = "19.99"
if let price = Double(priceString) {
print(price * 2) // الناتج: 39.98
}هذا مفيد بشكل خاص عند دمج readLine() مع العمليات الرقمية. يمكنك ربط عملية فك التغليف (unwrapping) معاً:
if let input = readLine(), let age = Int(input) {
print("Next year you'll be \(age + 1)")
}الفاصلة في جملة if let تعني أن كلا الشرطين يجب أن يتحققا — يجب أن يكون المدخل موجوداً، ويجب أن يكون قابلاً للتحويل إلى عدد صحيح.
التحدي
سهلاقرأ مدخلين: رقم عشري كسلسلة نصية وعدد صحيح كسلسلة نصية. قم بتحويلهما إلى أنواعهما الرقمية المناسبة واحسب حاصل ضربهما.
ستتلقى المدخلات التالية:
- السطر الأول: رقم عشري (على سبيل المثال،
"3.5") - السطر الثاني: عدد صحيح (على سبيل المثال،
"4")
استخدم readLine() لقراءة كلا المدخلين. قم بتحويل المدخل الأول إلى Double والثاني إلى Int. ثم اضربهم معاً واطبع النتيجة.
استخدم if let مع ربط اختياري متسلسل (chained optional binding) لفك تغليف (unwrap) كل من المدخل والقيمة المحولة بأمان.
اطبع: حاصل ضرب الرقمين كـ Double
ورقة مرجعية
تتطلب لغة Swift تحويلاً صريحاً للأنواع بين النصوص والأرقام.
لتحويل نص إلى عدد صحيح، استخدم Int(). وهي تعيد قيمة اختيارية (optional) لأن التحويل قد يفشل:
let input = "42"
if let number = Int(input) {
print(number + 10) // Output: 52
}لتحويل نص إلى رقم عشري، استخدم Double():
let priceString = "19.99"
if let price = Double(priceString) {
print(price * 2) // Output: 39.98
}يمكنك ربط فك التغليف الاختياري (optional unwrapping) مع readLine() باستخدام الفاصلة في if let. يجب أن ينجح كلا الشرطين:
if let input = readLine(), let age = Int(input) {
print("Next year you'll be \(age + 1)")
}جرّب بنفسك
// قراءة الرقم العشري كسلسلة نصية
if let decimalString = readLine() {
// قراءة الرقم الصحيح كسلسلة نصية
if let intString = readLine() {
// TODO: اكتب كودك أدناه
// قم بتحويل decimalString إلى Double و intString إلى Int باستخدام if let
// ثم احسب واطبع ناتج ضربهما
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
4المعاملات - الجزء الأول
المعاملات الحسابيةمعامل باقي القسمةالإسناد المركبمراجعة - عمليات رياضية بسيطةمعاملات المقارنة7أساسيات الإدخال والإخراج
دالة الطباعةتضمين النصوصإدخال ReadLineتحويل الأنواعمراجعة - حتى 120مراجعة - True أو False10الدوال
تعريف دالةالمعاملات والوسائطقيم الإرجاعتسميات الوسائطمراجعة - دالة Sigmaمراجعة - دالة Validationالقيم الافتراضية2المتغيرات
Let مقابل Varتوصيف الأنواع (Type Annotations)الأرقامStringBooleanقواعد التسميةمراجعة - تهيئة المتغيرات5المعاملات - الجزء الثاني
المعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيطالمعاملات المنطقية - الجزء الثالثالمعامل الثلاثي (Ternary Operator)8حاسبة تقسيم الفاتورة
رسالة الترحيبالحصول على المدخلات3القيم الاختيارية (Optionals)
ما هي القيم الاختياريةفك القيم باستخدام If Letاستخدام Guard Letمعامل دمج Nilمراجعة - فك القيم بأمان9حلقات التكرار
حلقة For-Inحلقة Whileحلقة Repeat-WhileBreakContinueمراجعة - المضروب (Factorial)النطاقات في حلقات التكرارالحلقات المتداخلةمراجعة - الإدخال الديناميكي (Dynamic Input)