Qual é a diferença entre"?"e"!"em Swift?

Eu sei o quê?"e"!"mean when I declare variables in Swift. Mas o que significam quando usam estas variáveis? Por exemplo, neste código:

var attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: "placeholder.png")
attachment.image!.size ... // or attachment.image?.size ...
Qual é a diferença entre attachment.image!.size e attachment.image?.size?

 15
Author: Aaron Brager, 2014-09-17

3 answers

Utilize {[[0]} se tiver a certeza que image? não é nil. Se estiver errado (e for nil) a sua aplicação irá estoirar. Isto chama-se desembrulhamento forçado.

Se não tiver a certeza não seránil, use image?.

No seu caso image! está bem, uma vez que controla se placeholder.png Existe.

Leia toda a documentação em opções rápidas. É uma parte básica e fundamental da linguagem.

 38
Author: Aaron Brager, 2016-02-09 11:50:12

O que é? e ?:

  • usar ? se o valor pode tornar-se nulo no futuro, de modo que você testar para presente.
  • usa ! se realmente não se tornar nula no futuro, mas tem de ser zero inicialmente.

Se estiver a utilizar {[[0] } Qualquer variável com ! significa que o compilador não se preocupa com essa variável tem qualquer valor ou nil. ele vai tomar medidas mais, ele vai tentar obter o tamanho da imagem. se attachment.image For nil então a aplicação será o estoiro aqui.

Embora, attachment.image?.size, Isto irá certificar-se de que, se attachment.image não for nula, serão tomadas outras medidas, caso contrário, mas irá confirmar que a aplicação não será interrompida no caso do valor nil de image .

Resumo:

Temos de usar !, quando nos certificamos de que o tipo de opção variável tem valor de cada vez e precisamos tomar medidas mais, caso contrário.
 21
Author: virus, 2014-12-18 09:57:43

Quando estiver a usar ! e a variável for nil irá despoletar um erro de tempo de execução, mas se usar ? irá falhar graciosamente. Mais informações no documento da apple

 1
Author: Aryan, 2015-12-24 11:20:03