を成功した場合に決定することは、以下の私のコードスウィフトは:文字列から整数へのキャストは
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)
}
}
URLをロードした場合、それは単一の整数を返しますです。インターネットアクセスの前にログインが必要な空港などの悪いインターネット接続は、整数を返しませんが、ログインを要求する完全なHTMLページを返します。 return Int(contents as String)!
でダウンキャストを強制すると、エラーfatal error: unexpectedly found nil while unwrapping an Optional value
が生成されます。
私はこれを書いたときにcatchステートメントを実行すると仮定しましたが、代わりに致命的なエラーを返します。どのように私はこれをキャッチできますか?
これは直接質問に答えるものではありませんが、ネットワークの到達可能性ライブラリの使用を検討してください。あなたが考えていない可能性のある他のネットワーク到達可能性の問題を捕捉し、ネットワークが到達可能になったときにバージョンチェックを非同期にトリガするようなことを行うことができます。 ココアポッドには多くのものがあります。多くはブロックベースなので、あなたが書いたようなメソッドを持たずに、成功事例からReachabilityライブラリを渡したブロックの中にコードを移動します。 – divergio