المُهيِّئات
جزء من قسم البرمجة كائنية التوجه في رحلة 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التحدي
سهلاكتب المُهيِّئ للصنف 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())
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift