mutating وإعادة إسناد self
استبدل self بالكامل من داخل أسلوب mutating.
mutating وإعادة إسناد self درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
إعادة تعيين self
يمكنكم داخل أسلوب mutating إسناد قيمة جديدة تمامًا إلى self، وبذلك تستبدلون المثيل بأكمله.
struct Point {
var x = 0
var y = 0
mutating func reset() {
self = Point(x: 0, y: 0)
}
}
var p = Point(x: 3, y: 4)
p.reset()
print(p.x, p.y)لماذا نعيد تعيين self
تكون إعادة تعيين self مفيدة عندما يكون من الأسهل التعبير عن الحالة الجديدة بوصفها مثيلًا جديدًا بدلًا من تعديل الحقول واحدًا تلو الآخر.
struct Vector {
var dx: Int
var dy: Int
mutating func negate() {
self = Vector(dx: -dx, dy: -dy)
}
}
var v = Vector(dx: 2, dy: -3)
v.negate()
print(v.dx, v.dy)إعادة تعيين self في التعدادات
في التعدادات، يتم تبديل الحالة بإسناد حالة جديدة إلى self.
enum State {
case idle, running, done
mutating func advance() {
switch self {
case .idle: self = .running
case .running: self = .done
case .done: self = .done
}
}
}
var s = State.idle
s.advance()
s.advance()
print(s)مكافئة لتعديل الحقول
يُعادل إسناد self = Point(x: 1, y: 1) ضبط x وy كلًّا على حدة، لكنه أكثر اختصارًا.
struct Point {
var x = 0
var y = 0
mutating func setBoth(_ n: Int) {
self = Point(x: n, y: n)
}
}
var p = Point()
p.setBoth(7)
print(p.x, p.y)قراءة self القديمة أولًا
يمكنكم حساب المثيل الجديد انطلاقًا من المثيل الحالي قبل إعادة تعيينه.
struct Counter {
var value: Int
mutating func doubled() {
self = Counter(value: value * 2)
}
}
var c = Counter(value: 5)
c.doubled()
print(c.value)تحويل بأسلوب الباني
تتيح إعادة تعيين self للأسلوب التعبير عن تحويل كامل في خطوة واحدة.
struct Temperature {
var celsius: Double
mutating func toRounded() {
self = Temperature(celsius: celsius.rounded())
}
}
var t = Temperature(celsius: 21.7)
t.toRounded()
print(t.celsius)في أساليب mutating فقط
لا يمكنكم إسناد قيمة إلى self إلا داخل أسلوب معلَّم بـ mutating. أما الأسلوب العادي فلا يمكنه ذلك.
struct Flag {
var on = false
mutating func turnOn() {
self = Flag(on: true)
}
}
var f = Flag()
f.turnOn()
print(f.on)الدمج مع المنطق الشرطي
يمكنكم استخدام التفرعات وإعادة تعيين self في بعض الحالات فقط.
struct Score {
var points: Int
mutating func clamp() {
if points > 100 {
self = Score(points: 100)
}
}
}
var s = Score(points: 150)
s.clamp()
print(s.points)نمط التبديل في التعدادات
يُعد تبديل تعداد ذي حالتين مثالًا كلاسيكيًا على إعادة تعيين self.
enum Switch {
case off, on
mutating func flip() {
self = (self == .off) ? .on : .off
}
}
var sw = Switch.off
sw.flip()
print(sw)لا تأثير على النسخ الأخرى
تغيّر إعادة تعيين self هذا المثيل فقط. وتبقى النسخ الأخرى من القيمة دون تغيير.
struct Box { var n: Int; mutating func zero() { self = Box(n: 0) } }
var a = Box(n: 5)
var b = a
a.zero()
print(a.n, b.n)وضوح القصد
استخدموا إعادة تعيين self عندما تجعل التحويل واضحًا، واستخدموا تعديل الحقول عندما تتغير خاصية واحدة فقط.
struct Pair {
var a: Int
var b: Int
mutating func swapValues() {
self = Pair(a: b, b: a)
}
}
var p = Pair(a: 1, b: 2)
p.swapValues()
print(p.a, p.b)تحقق سريع
اختبروا إعادة تعيين self.
مراجعة
يمكنكم داخل أسلوب mutating إسناد قيمة جديدة كاملة إلى self، وبذلك تستبدلون المثيل. وهذا مناسب للتحويلات الكاملة لأنه مختصر، كما أنه الطريقة التي تبدّل بها التعدادات حالاتها. ويؤثر ذلك في هذا المثيل فقط، لا في النسخ الأخرى.
enum T { case a, b; mutating func go() { self = .b } }
var t = T.a
t.go()
print(t)تعلم Swift مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 122
- الدروس
- 409
الأسئلة الشائعة
هل درس «mutating وإعادة إسناد self» مجاني؟
نعم — نص درس «mutating وإعادة إسناد self» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «mutating وإعادة إسناد self»؟
استبدل self بالكامل من داخل أسلوب mutating. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «mutating وإعادة إسناد self»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أنواع القيم وعدم قابلية التغيير
- الكلمة المفتاحية mutating
- mutating وإعادة إسناد self
- البدائل غير المعدِّلة