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"