Mutating e riassegnazione di self
Sostituisci interamente self da un metodo mutating.
Mutating e riassegnazione di self è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Riassegnare self
All'interno di un metodo mutating è possibile assegnare un valore completamente nuovo a self, sostituendo l'intera istanza.
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)Perché riassegnare self
Riassegnare self è utile quando il nuovo stato si esprime più facilmente come una nuova istanza, invece di modificare i campi uno alla volta.
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)Gli enum riassegnano self
Per gli enum, il cambio di caso si esegue assegnando un nuovo caso a 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)Equivalente alla modifica dei campi
Assegnare self = Point(x: 1, y: 1) equivale a impostare x e y individualmente, ma in modo più conciso.
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)Leggere prima il vecchio self
È possibile calcolare la nuova istanza a partire da quella corrente prima di riassegnarla.
struct Counter {
var value: Int
mutating func doubled() {
self = Counter(value: value * 2)
}
}
var c = Counter(value: 5)
c.doubled()
print(c.value)Trasformazione in stile builder
La riassegnazione di self consente a un metodo di esprimere una trasformazione completa in un solo passaggio.
struct Temperature {
var celsius: Double
mutating func toRounded() {
self = Temperature(celsius: celsius.rounded())
}
}
var t = Temperature(celsius: 21.7)
t.toRounded()
print(t.celsius)Solo nei metodi mutating
È possibile assegnare a self soltanto all'interno di un metodo contrassegnato con mutating. Un metodo normale non può farlo.
struct Flag {
var on = false
mutating func turnOn() {
self = Flag(on: true)
}
}
var f = Flag()
f.turnOn()
print(f.on)Combinare con la logica
È possibile usare condizioni e riassegnare self solo in alcuni casi.
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)Pattern di toggle di un enum
Un enum con due casi e un toggle è un esempio classico di riassegnazione di self.
enum Switch {
case off, on
mutating func flip() {
self = (self == .off) ? .on : .off
}
}
var sw = Switch.off
sw.flip()
print(sw)Nessun effetto sulle altre copie
Riassegnare self modifica solo questa istanza. Le altre copie del valore restano inalterate.
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)Intento leggibile
Usi la riassegnazione di self quando rende evidente la trasformazione; usi la modifica dei campi quando cambia una sola proprietà.
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)Verifica rapida
Verifichi la riassegnazione di self.
Riepilogo
All'interno di un metodo mutating è possibile assegnare un valore completamente nuovo a self, sostituendo l'istanza. Questa tecnica è concisa per le trasformazioni complete ed è il modo in cui gli enum cambiano caso. Modifica solo questa istanza, non le altre copie.
enum T { case a, b; mutating func go() { self = .b } }
var t = T.a
t.go()
print(t)Impara Swift con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 122
- Lezioni
- 409
Domande Frequenti
La lezione «Mutating e riassegnazione di self» è gratuita?
Sì — il testo completo di «Mutating e riassegnazione di self» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Mutating e riassegnazione di self»?
Sostituisci interamente self da un metodo mutating. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Mutating e riassegnazione di self»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Tipi valore e immutabilità
- La parola chiave mutating
- Mutating e riassegnazione di self
- Alternative non mutating