web-dev-qa-db-fra.com

Rapide. URL renvoyant nil

J'essaie d'ouvrir un site Web dans mon application, mais pour une raison quelconque, une ligne continue de revenir à zéro, voici mon code:

let url = URL(string: "http://en.wikipedia.org/wiki/\(element.Name)")!
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    } else {
        UIApplication.shared.openURL(url)
    }
}

C'est la première ligne (let url = URL...) qui continue de renvoyer cette erreur:

erreur fatale: trouvé inopinément nil lors du déballage d'une valeur facultative.

Que dois-je faire pour résoudre ce problème?

11
Benja0906

Ne forcez pas le déballer avec (!). Lorsque vous utilisez (!) Et que la valeur de la variable est nulle, votre programme se bloque et vous obtenez cette erreur. Au lieu de cela, vous voulez déballer en toute sécurité l'option avec une instruction "guard let" ou "if let".

guard let name = element.Name as? String else {
    print("something went wrong, element.Name can not be cast to String")
    return
}

if let url = URL(string: "http://en.wikipedia.org/wiki/\(name)") {
    UIApplication.shared.openURL(url)
} else {
    print("could not open url, it was nil")
}

Si cela ne fait pas l'affaire, vous pouvez avoir un problème avec element.Name. Je vérifierais donc si c'est une option si vous rencontrez toujours des problèmes.

Mise à jour

J'ai ajouté un moyen possible de vérifier la propriété element.Name pour voir si vous pouvez la convertir en chaîne et créer l'URL souhaitée que vous souhaitez créer. Vous pouvez voir le code au-dessus du code que j'ai précédemment publié.

4
user3353890

Je pense que ça aidera. Votre element.name peut contenir un espace entre les mots, donc l'ajout de PercentEncoding crée une chaîne PercentEncoding.

let txtAppend = (element.Name).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let url = "http://en.wikipedia.org/wiki/\(txtAppend!)"
let openUrl = NSURL(string: url)
if #available(iOS 10.0, *) {
    UIApplication.shared.open(openUrl as! URL, options: [:], completionHandler: nil)
} else {
    UIApplication.shared.openURL(openUrl as! URL)
}
16
Dipal Patel

Version Swift 4 pour ce correctif:

str.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
3
BlaShadow

il peut s'agir d'un problème d'encodage. as-tu essayé

let str = "http://en.wikipedia.org/wiki/\(element.Name)"
let encodedStr = str.stringByAddingPercentEncodingWithAllowedCharacters(NSCha‌​racterSet.URLQueryAl‌​lowedCharacterSet()
0
GetSwifty