Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المُهيِّئات

جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 4 من 57.

يُشغَّل المُهيِّئ، المكتوب بصيغة init، عند إنشاء مثيل ويمنح الخصائص قيمها الابتدائية. وتصبح معاملاته وسيطات استدعاء النوع:

class Book {
    var title: String
    var pages: Int

    init(title: String, pages: Int) {
        self.title = title
        self.pages = pages
    }
}

let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)

الناتج:

Dune
412

تحتاج كل خاصية إلى قيمة قبل أن يمكن استخدام النسخة. يجب تعيين الخاصية التي لا تحتوي على قيمة افتراضية في init، وإلا فلن يُترجم الصنف. يمكن تعيين الخاصية المُعلنة باستخدام let مرة واحدة في init، ولا يمكن تغييرها بعد ذلك:

class Book {
    let isbn: String     // يُعيَّن مرة واحدة، في init
    var title: String

    init(isbn: String, title: String) {
        self.isbn = isbn
        self.title = title
    }
}

يمكن أن تكون معاملات init ذات قيم افتراضية، لذا لا يمرّر المستدعون إلا ما يختلف:

class Timer {
    var seconds: Int
    var label: String

    init(seconds: Int, label: String = "timer") {
        self.seconds = seconds
        self.label = label
    }
}

let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")

الناتج:

egg 300
timer 30

يمكن أن يكون للفئة أكثر من مُهيِّئ واحد، ولكلٍّ منها معاملات مختلفة. يعمل convenience init على ملء بعض القيم واستدعاء المُهيِّئ الرئيسي باستخدام self.init(...):

class Temperature {
    var celsius: Double

    init(celsius: Double) {
        self.celsius = celsius
    }

    convenience init(fahrenheit: Double) {
        self.init(celsius: (fahrenheit - 32) * 5 / 9)
    }
}

print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)

الناتج:

20.0
100.0
challenge icon

التحدي

سهل

اكتب المُهيِّئ للصنف Account. يستقبل owner وbalance اختياريًا، وتكون قيمته الافتراضية 0، ثم يخزّن كليهما. بعد ذلك أكمل summary()، التي تُرجع Ada has 150.

يقرأ الكود المقدَّم اسم المالك، وعندما يكون هناك سطر ثانٍ، يقرأ الرصيد الابتدائي. وينشئ الحساب مع الرصيد أو بدونه، ثم يطبع summary().

ضع كودك في Account.swift. يحتوي main.swift على كود الإدخال/الإخراج المقدَّم، ولا يمكن تعديله.

جرّب بنفسك

// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
let account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Swift