0Pricing
Swift Academy · Aula

A Palavra-chave mutating

Escreva métodos que modificam o estado de structs e enums.

A Palavra-chave mutating é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

Métodos não podem modificar por padrão

Um método de instância de uma struct não pode alterar as propriedades armazenadas da estrutura, a menos que seja marcado como mutating.

struct Counter {
    var value = 0
    mutating func increment() {
        value += 1
    }
}
var c = Counter()
c.increment()
print(c.value)

Por que mutating é necessário

Como as estruturas são tipos por valor, o compilador exige que você opte explicitamente pela mutação.

struct Bank {
    var balance = 0
    mutating func deposit(_ amount: Int) {
        balance += amount
    }
}
var b = Bank()
b.deposit(50)
print(b.balance)

Métodos sem mutação

Um método que apenas lê propriedades não precisa de mutating.

struct Rectangle {
    var width = 0
    var height = 0
    func area() -> Int {
        return width * height
    }
}
let r = Rectangle(width: 3, height: 4)
print(r.area())

mutating em enumeração

As enumerações também podem ter métodos mutating que mudam a instância para um caso diferente.

enum Light {
    case on, off
    mutating func toggle() {
        self = (self == .on) ? .off : .on
    }
}
var l = Light.off
l.toggle()
print(l)

Não pode ser chamado em let

Você não pode chamar um método mutating em uma instância constante (let); fazer isso causa um erro de compilação.

struct Counter {
    var value = 0
    mutating func bump() { value += 1 }
}
var c = Counter()
c.bump()
// let d = Counter(); d.bump() // error
print(c.value)

Alterações em várias propriedades

Um único método mutating pode alterar várias propriedades ao mesmo tempo.

struct Player {
    var x = 0
    var y = 0
    mutating func move(dx: Int, dy: Int) {
        x += dx
        y += dy
    }
}
var p = Player()
p.move(dx: 3, dy: 5)
print(p.x, p.y)

mutating retornando um valor

Um método mutating também pode retornar um valor enquanto altera o estado.

struct Stack {
    var items: [Int] = []
    mutating func pop() -> Int? {
        return items.popLast()
    }
}
var s = Stack(items: [1, 2, 3])
print(s.pop() ?? -1)
print(s.items)

Usos de mutating na biblioteca padrão

Métodos como append em Array são mutating, por isso você precisa de uma matriz var para chamá-los.

var nums = [1, 2]
nums.append(3)
print(nums)

mutating e estado calculado

Você pode atualizar o estado derivado dentro de um método mutating, mantendo os invariantes consistentes.

struct Wallet {
    var coins = 0
    var label = "empty"
    mutating func add(_ n: Int) {
        coins += n
        label = coins > 0 ? "has coins" : "empty"
    }
}
var w = Wallet()
w.add(5)
print(w.coins, w.label)

A ordem é importante

As instruções dentro de um método mutating são executadas de cima para baixo, portanto as linhas posteriores veem as alterações anteriores.

struct Accumulator {
    var total = 0
    mutating func process() {
        total += 1
        total *= 10
    }
}
var a = Accumulator()
a.process()
print(a.total)

Classes não precisam de mutating

Os tipos por referência (class) podem alterar propriedades sem essa palavra-chave, pois não são tipos por valor.

class Box {
    var value = 0
    func bump() { value += 1 }
}
let box = Box()
box.bump()
print(box.value)

Verificação rápida

Teste a palavra-chave mutating.

Recapitulação

Marque o método de instância de uma estrutura ou enumeração como mutating quando ele alterar propriedades armazenadas (ou, no caso de enumerações, mudar de caso). Esses métodos não podem ser chamados em instâncias let. Classes, por serem tipos por referência, nunca precisam disso.

struct C { var v = 0; mutating func inc() { v += 1 } }
var c = C()
c.inc()
print(c.v)

Perguntas Frequentes

A aula “A Palavra-chave mutating” é grátis?

Sim — o texto completo de “A Palavra-chave mutating” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “A Palavra-chave mutating”?

Escreva métodos que modificam o estado de structs e enums. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “A Palavra-chave mutating”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Tipos de Valor e Imutabilidade
  2. A Palavra-chave mutating
  3. Mutação e Reatribuição de self
  4. Alternativas sem Mutação
← Voltar para Swift Academy