Quelle est la différence entre "?" Et "!" Dans Swift?

Je sais ce que "?" et "!" veux dire quand je déclarer les variables en Swift. Mais que veulent-ils dire quand à l'aide de ces variables? Par exemple, dans ce code:

var attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: "placeholder.png")
attachment.image!.size ... // or attachment.image?.size ...

Quelle est la différence entre attachment.image!.size et attachment.image?.size?

source d'informationauteur Aryan