52 votes

Swift 3: Expression implicitement contrainte de 'UIView?' à tout

Quelqu'un d'autre doit avoir reçu ce message pendant (ou après) la conversion d'un projet iOS Swift 3, mais quand je fais une recherche sur Google, je n'obtiens pas de résultats pertinents.

De toute façon, après la conversion de Swift 3, j'ai environ 30 avertissements qui disent:

Expression implicitement convertie à partir de 'UIView?"

Mais les avertissements n'indiquent pas une ligne de code spécifique. Ils ont seulement référence à la classe d'où l'avertissement existe.
Quelqu'un aurait-il un aperçu de cet avertissement ou comment je pourrait aller de les réduire au silence?

35voto

Madson Cardoso Points 1

Dans mon cas, il s'agissait d'un problème lié à un dictionnaire sans type explicite:

 let dict = ["key": value]
 

Que j'ai résolu en spécifiant le type:

 let dict: [String: Any] = ["key": value]
 

Dans votre cas, vous pouvez spécifier votre type de valeur:

 let dict: [String: UIView] = ["key": value]
 

33voto

P1X3L5 Points 1778

Ce sera le cas lorsque la fonction que vous appelez a un paramètre de type Quelconque, et vous êtes de passage à une option.

Par exemple:

let color: UIColor? = UIColor.red
UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color], for: .normal)

Notez que la couleur est de type UIColor? et que setTitleTextAttributes s'attend à un dictionnaire de type [String: Tout]?.

Afin d'éviter l'avertissement que vous avez à force déballer vos facultatif, ou de le jeter à Tout.

UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color!], for: .normal)

ou

UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: color as Any], for: .normal)

15voto

Daniel Points 1268

Ressemble à un bug dans la Swift compilateur:

https://bugs.swift.org/browse/SR-2921

Actuellement, je vais voir cela avec Xcode 8.1 et 8.2 bêta 1.

Dans votre cas, l'avertissement doit identifier le fichier source, mais pas la ligne que vous avez déclaré. Vous aurez à chasser autour des appels à des fonctions avec Any paramètres.

La bonne nouvelle est qu'il semble résolu dans une prochaine Swift de la chaîne.

Je crois que c'est corrigé dans Xcode 8.3 bêta 1 (mais n'ont pas confirmé)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X