2017-10-19 15 views
0

En utilisant ReactiveSwift, j'ai utilisé le code suivant:'String' n'est pas convertible en 'String?'

let alertMessageProperty = MutableProperty<String?>(nil) 
... 
.on(failed: { self.alertMessageProperty.value = $0.localizedDescription }) 
... 

qui signifie:

  • self.alertMessageProperty.value est de type String?
  • dans .on(failed:), failed est de type ((Error) -> Void)? si $0 est de type Erreur et $0.localizedDescription est de type String.
  • Dans un terrain de jeu simple, affecter une String à une variable String? fonctionne correctement, comme prévu.

Il ne compile pas et je reçois cette erreur:

'String' is not convertible to 'String?' 

Je pense que String est SO convertible en String?. Que se passe t-il ici?

Versions: Swift 3.2 - ReactiveSwift 2.0.1

+0

L'un est optionnel, l'autre ne l'est pas. – LinusGeffarth

+0

La duplication possible de [Erreur: 'String' n'est pas convertible en 'String!'] (Https://stackoverflow.com/questions/38186121/error-string-is-not-convertible-to-string) – alseether

+0

@alseether: Intéressant mais la réponse à ce poste n'est pas claire. Cela ressemble à un bug du compilateur Swift mais il n'est pas clairement mentionné tel quel. –

Répondre

0

Il y a beaucoup qui manque dans votre exemple, je ne peux pas reproduire le problème exact.

Votre code que vous avez omis dans ... est probablement beaucoup plus compliqué, peut-être une chaîne d'opérations réactives multiples, et je suppose que l'erreur réelle est quelque chose de complètement différent quelque part dans ce code. Le message d'erreur que vous obtenez est juste trompeur en raison d'un bug dans le compilateur Swift.

Vous pouvez essayer de décomposer votre code en plus petits morceaux et de voir si le compilateur échoue maintenant à un endroit différent et essayez de le réduire de cette façon.