Qual é a diferença entre"?"e"!"em Swift?
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
?
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.
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.