web-dev-qa-db-fra.com

Swift 3: expression implicitement contrainte de 'UIView?' À Any

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

Quoi qu'il en soit, après la conversion en Swift 3, j'ai environ 30 avertissements qui disent:

Expression implicitement contrainte de 'UIView?' à tout

Mais les avertissements ne pointent sur aucune ligne de code spécifique. Ils ne font référence qu'à la classe où l'avertissement existe.
Quelqu'un a-t-il un aperçu de cet avertissement ou de la façon dont je pourrais le faire pour le faire taire?

52
RyJ

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

let dict = ["key": value]

Puis 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]
35
Madson Cardoso

Cela se produit lorsque la fonction que vous appelez a un paramètre de type Any, et que vous passez un facultatif.

Par exemple:

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

Notez que la couleur est de type IColor? et que setTitleTextAttributes attend un dictionnaire de type [String: Any]?.

Pour éviter cet avertissement, vous devez soit forcer le déballement de votre option, soit le lancer dans Any.

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

ou

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

Ressemble à un bogue du compilateur Swift:

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

Actuellement, je vois cela avec Xcode 8.1 et 8.2 beta 1.

Dans votre cas, l'avertissement doit identifier le fichier source, mais pas la ligne, comme vous l'avez indiqué. Vous devrez rechercher des appels aux fonctions avec les paramètres Any.

La bonne nouvelle est qu’il semble être corrigé dans une prochaine chaîne d’outils Swift.

Je crois que ceci est corrigé dans Xcode 8.3 beta 1 (mais n’a pas été confirmé)

15
Daniel

Problème

Le type attendu est Any mais le type fourni était UIView?

Le problème vient de facultatif, assurez-vous simplement qu'une instance de UIView est transmise et que tout fonctionnera.

0
user1046037