Pourquoi n'est pas possible d'append une string! via + = opérateur?

Comme le titre l'indique, j'essaie d'append du text à une string optionnelle implicitement déballée via l'opérateur += qui me donne

 'Ssortingng!' is not identical to 'UInt8' 

Pour vous permettre de voir ce que je veux dire:

 var mySsortingng: Ssortingng = "Hello " mySsortingng += "world" // works great var myOptionalSsortingng: Ssortingng! = "Foo " myOptionalSsortingng += " bar" // error: Ssortingng! is not identical to 'UInt8' 

Cependant, si je l'ajoute pendant que la tâche fonctionne

 var myOptionalSsortingng: Ssortingng! = "Foo " myOptionalSsortingng = myOptionalSsortingng + " bar" // works great 

Quelqu'un peut-il me dire la raison de cela, ou y a-t-il quelque chose qui me manque dans les optionnels?

Mettre à jour

 mySecondOpSsortingng: Ssortingng? = "Hello " mySecondOpSsortingng! += "world" // works great too 

Chaîne! est implicitement déroulé type facultatif qui est un cas particulier de type optionnel.

Comme vous le savez, Ssortingng! n'est pas identique à Ssortingng. Alors quand vous écrivez:

 var myOptionalSsortingng: Ssortingng! = "Foo " myOptionalSsortingng += " bar" // error: Ssortingng! is not identical to 'UInt8' 

il va essayer de find + = opérateur avec Ssortingng! ce qu'il ne pouvait pas et l'erreur d'où.

si vous le déballez explicitement (vous pourriez dire alors qu'il défie le but) fonctionne:

  myOptionalSsortingng! += " bar" 

Il n'y a rien de mal dans votre code. Il semble que dans la bibliothèque standard de Swift, il n'y ait pas de surcharge d'opérateur += faite pour fonctionner avec les options optionnelles.

Tiré de la bibliothèque standard, + = est surchargé pour Ssortingng (pas pour Ssortingng?)

 func +=(inout lhs: Ssortingng, rhs: Ssortingng) 

Suivez cette belle réponse SO pour voir le contenu de la bibliothèque standard Swift pour vérifier que

Remarque

Votre code sera mieux écrit en tant que:

 var myOptionalSsortingng: Ssortingng? = "Foo " myOptionalSsortingng myOptionalSsortingng! += " bar"