Unten ist mein CodeSwift: Feststellen, ob Guss auf ganze Zahl von String gelingt
func contactForUpdates() -> Int {
//contact server for most recent version
let versionURL = settings.versionURL
if let url = URL(string: versionURL) {
do {
let contents = try NSString(contentsOf: url, usedEncoding: nil)
//NEXT LINE IS WHERE THE QUESTIONS LIES
return Int(contents as String)!
} catch {
// contents could not be loaded
processError("Current version could not be loaded.")
return Int(0)
}
} else {
// the URL was bad!
processError("Current version could not be loaded--URL was bad.")
return Int(0)
}
}
Wenn die URL geladen wird, wird es eine einzige ganze Zahl zurück. Eine schlechte Internetverbindung, z. B. ein Flughafen, der vor dem Internetzugang eine Anmeldung erfordert, gibt keine ganze Zahl zurück, sondern eine vollständige HTML-Seite, die eine Anmeldung anfordert. Erzwingen eines Downcast mit return Int(contents as String)!
wird den Fehler fatal error: unexpectedly found nil while unwrapping an Optional value
produzieren.
Ich nahm an, dass dies die catch-Anweisung ausführen würde, wenn ich dies schrieb, aber stattdessen gibt es einen schwerwiegenden Fehler zurück. Wie kann ich das fangen?
Dies beantwortet nicht direkt die Frage, aber ich empfehle für so etwas wie Sie eine Netzwerk-Reachability-Bibliothek verwenden. Es fängt andere Netzwerkerreichbarkeitsprobleme ein, an die Sie vielleicht nicht gedacht haben, und kann Dinge wie die Versionsüberprüfung asynchron auslösen, wenn das Netzwerk erreichbar wird. Es gibt viele auf Cocoapods. Viele sind blockbasiert. Anstatt eine Methode wie die von Ihnen geschrieben zu haben, verschieben Sie den Code von Ihrem Erfolgsfall in den Block, an dem Sie die Erreichbarkeitsbibliothek übergeben. – divergio