Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Diferença entre os operadores ! e ?

Pessoal gostaria de entender qual a diferença entre os operadores !e ?, sendo que notei que funcionaram da mesma maneira nos exemplos a seguir:

Exemplo com ?:

class Teste {
    var numero:Int? //<-- Utilizando ?
}

let teste1 = Teste()
print(teste1.numero) //A saída é nula

Exemplo com !:

class Teste {
    var numero:Int! //<-- Utilizando !
}

let teste1 = Teste()
print(teste1.numero) //A saída é nula

Em ambos os casos a saída foi nula, mas eu esperava que ao utilizar o operador ! ocorresse algum erro, pois entendi que ele afirma que a variável terá algum valor.

3 respostas
solução!

Willian, tudo bem ?

Cara esses operadores nos ajudam durante o código a evitar um nullpointer, vamos entender o motivo.

O operador ? vai sempre fazer uma checagem antes de chamar o atributo, então teríamos um código parecido com esse :

if let numero = teste?.numero

Nesse caso estamos validando se nossa referencia é valida, caso seja seja eu pego a informação dela.

Agora vamos analisar o operador ! :


let numero = teste!.numero

Repare que aqui estamos afirmando para o compilador que a referencia teste é valida e por esse motivo ele vai chamar o atributo numero dessa classe, mas analisa que caso esteja vazio e fizermos alguma coisa com esse numero nosso sistema quebrará.

Espero ter deixado um pouco mais claro para ti

Abraços

Valeu Matheus, agora deu pra entender!

O que precisar pode abrir um novo tópico :D