الأصناف هي مراجع
جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 5 من 57.
الفئة هي نوع مرجعي: يحتفظ المتغير بمرجع إلى الكائن، وليس بنسخة منه. يؤدي إسناد مثيل إلى متغير آخر إلى إنشاء اسم ثانٍ للكائن نفسه:
class Wallet {
var coins = 10
}
let mine = Wallet()
let alias = mine
alias.coins = 25
print(mine.coins)الناتج:
25=== يتحقق مما إذا كان مرجعان يشيران إلى النسخة نفسها. تُعدّ النسختان المنفصلتان كائنين مختلفين حتى عندما تتطابق جميع خصائصهما:
class Wallet {
var coins = 10
}
let a = Wallet()
let b = a
let c = Wallet()
print(a === b)
print(a === c)الناتج:
true
falseتعمل الدالة التي تتلقى نسخةً على كائن المستدعي، لذا تظل التغييرات التي أُجريت داخل الدالة ظاهرةً بعد ذلك:
class Wallet {
var coins = 10
}
func payFee(_ wallet: Wallet) {
wallet.coins -= 3
}
let w = Wallet()
payFee(w)
payFee(w)
print(w.coins)الناتج:
4تثبّت let المرجع، وليس الكائن. لا يمكن لثابت يحتوي على مثيل لفئة أن يشير إلى مثيل آخر، لكن خصائص var للمثيل يمكن أن تتغير مع ذلك. كما أن المصفوفات التي تحتوي على مثيلات تحتفظ بالمراجع أيضًا:
class Wallet {
var coins = 10
}
let shared = Wallet()
let team = [shared, shared]
team[0].coins = 99
print(shared.coins)
print(team[1].coins)الناتج:
99
99التحدي
سهليتشارك فريق واحد Budget. أكمل spend(_:amount:)، وهي دالة تأخذ ميزانية وتطرح المبلغ فقط إذا كان المتبقي كافيًا، وتُرجع true عندما يُسمح بالإنفاق. ثم أكمل runTeam(start:purchases:): أنشئ ميزانية واحدة، واجعل كل عملية شراء تنفق من تلك الميزانية نفسها، وأرجع سطرًا واحدًا لكل عملية شراء (ok 30 أو denied 80) متبوعًا بـ left 20.
يقرأ الكود المُقدَّم الميزانية الابتدائية وعمليات الشراء كسطر مفصول بفواصل، ويطبع كل سطر مُعاد.
ضع الكود الخاص بك في Budget.swift وFunctions.swift. يحتوي main.swift على كود الإدخال/الإخراج المُقدَّم ولا يمكن تعديله.
جرّب بنفسك
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
let purchases = input[1].split(separator: ",").map { Int($0)! }
for line in runTeam(start: Int(input[0])!, purchases: purchases) { print(line) }
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift