0Pricing
Swift Academy · Leçon

Mutating et réaffectation de self

Remplacez entièrement self depuis une méthode mutating.

Mutating et réaffectation de self est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Réaffecter self

Dans une méthode mutating, vous pouvez attribuer une toute nouvelle valeur à self, ce qui remplace l'instance entière.

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)

Pourquoi réaffecter self

Réaffecter self est pratique lorsque le nouvel état s'exprime plus facilement sous la forme d'une nouvelle instance que par la modification successive des champs.

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)

Les énumérations réaffectent self

Pour les énumérations, le changement de cas s'effectue en attribuant un nouveau cas à 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)

Équivalent aux modifications de champs

Attribuer self = Point(x: 1, y: 1) revient à définir x et y individuellement, en plus concis.

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)

Lire l'ancien self avant

Vous pouvez calculer la nouvelle instance à partir de l'instance actuelle avant de la réaffecter.

struct Counter {
    var value: Int
    mutating func doubled() {
        self = Counter(value: value * 2)
    }
}
var c = Counter(value: 5)
c.doubled()
print(c.value)

Transformation de type générateur

La réaffectation de self permet à une méthode d'exprimer une transformation complète en une seule étape.

struct Temperature {
    var celsius: Double
    mutating func toRounded() {
        self = Temperature(celsius: celsius.rounded())
    }
}
var t = Temperature(celsius: 21.7)
t.toRounded()
print(t.celsius)

Uniquement dans les méthodes mutating

Vous ne pouvez attribuer une valeur à self que dans une méthode marquée mutating. Une méthode normale ne le permet pas.

struct Flag {
    var on = false
    mutating func turnOn() {
        self = Flag(on: true)
    }
}
var f = Flag()
f.turnOn()
print(f.on)

Combiner avec une logique

Vous pouvez effectuer un branchement et réaffecter self uniquement dans certains cas.

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)

Schéma de basculement d'une énumération

Le basculement d'une énumération à deux cas est un exemple classique de réaffectation de self.

enum Switch {
    case off, on
    mutating func flip() {
        self = (self == .off) ? .on : .off
    }
}
var sw = Switch.off
sw.flip()
print(sw)

Aucun effet sur les autres copies

Réaffecter self ne modifie que cette instance. Les autres copies de la valeur restent inchangées.

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)

Une intention lisible

Utilisez la réaffectation de self lorsque la transformation est ainsi évidente ; utilisez des modifications de champs lorsqu'une seule propriété change.

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)

Vérification rapide

Testez la réaffectation de self.

Récapitulatif

Dans une méthode mutating, vous pouvez attribuer une valeur entièrement nouvelle à self, ce qui remplace l'instance. Cette approche est concise pour les transformations complètes et permet aux énumérations de changer de cas. Elle ne modifie que cette instance, pas les autres copies.

enum T { case a, b; mutating func go() { self = .b } }
var t = T.a
t.go()
print(t)

Questions Fréquemment Posées

La leçon « Mutating et réaffectation de self » est-elle gratuite ?

Oui — le texte complet de « Mutating et réaffectation de self » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Mutating et réaffectation de self » ?

Remplacez entièrement self depuis une méthode mutating. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Mutating et réaffectation de self » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Types valeur et immutabilité
  2. Le mot-clé mutating
  3. Mutating et réaffectation de self
  4. Alternatives non mutantes
← Retour à Swift Academy