web-dev-qa-db-fra.com

UIImage sur Swift ne peut pas vérifier zéro

J'ai le code suivant sur Swift

var image = UIImage(contentsOfFile: filePath)
        if image != nil {
           return image
       }

Cela fonctionnait très bien, mais maintenant sur Xcode Beta 6, cela renvoie un avertissement

 'UIImage' is not a subtype of 'NSString'

Je ne sais pas quoi faire, j'ai essayé différentes choses comme

 if let image = UIImage(contentsOfFile: filePath) {
            return image
   }

Mais l'erreur se transforme en:

Bound value in a conditional binding must be of Optional type

Est-ce un bug sur Xcode6 beta 6 ou est-ce que je fais quelque chose de mal?

36
Wak

Mise à jour

Swift a maintenant ajouté le concept d'initialisateurs disponibles et UIImage en fait désormais partie. L'initialiseur renvoie un Facultatif, donc si l'image ne peut pas être créée, elle renverra nil.


Les variables par défaut ne peuvent pas être nil. C'est pourquoi vous obtenez une erreur lorsque vous essayez de comparer image à nil. Vous devez définir explicitement votre variable comme facultatif :

let image: UIImage? = UIImage(contentsOfFile: filePath)
if image != nil {
   return image!
}
53
drewag

La façon la plus simple de vérifier si une image a du contenu (> néant) est:

    if image.size.width != 0 { do someting} 
2
Jeremy Andrews
func imageIsNullOrNot(imageName : UIImage)-> Bool
{

   let size = CGSize(width: 0, height: 0)
   if (imageName.size.width == size.width)
    {
        return false
    }
    else
    {
        return true
    }
}

la méthode ci-dessus appelle Like as:

 if (imageIsNullOrNot(selectedImage))
 {
     //image is not null
 }
 else
 {
    //image is null
 }

ici, je vérifie la taille de l'image.

2
Vijay Rathod

Init, que vous appelez init?(contentsOfFile path: String) le ? signifie qu'il renvoie une valeur facultative .

Vous devez vérifier les variables facultatives pour nil avant de l'utiliser.

Réponse plus courte que celle acceptée et style Swift façon, que nommée chaînage facultatif à fais ça:

if let image = UIImage(contentsOfFile: filePath) {
   return image
}
1
skywinder

Vous pouvez vérifier son imageAsset comme ceci:

if image.imageAsset != nil
{
    // image is not null
}
else 
{
    //image is null
}
0
iHarshil