私は開発者ですので、tryブロックにコード全体をラップして、イベントログに書き込んだ後で心配することはありません。SwatchのCatchを試してみてください
私はちょうどHTMLページを解析し、テーブル内のリンクを探し、それらを抽出するためにカンナHTML/XMLポッドを使用して迅速
イムでキャッチラウンド私の頭を取得することはできません。イムは、トラブルが、私は常に// TD [2] // divの// [1]それはxpathでテーブルセル内のリンクがあることを知らないでこの
enum MyError: Error {
case FoundNil(String)
}
if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8)
{
var count = 0
//loop through all instances of <tr> in the html
for row in doc.xpath("//tr") {
var linkName = ""
do{
//get the <a> text from inside a <div> from the 2nd <td>
if let name = row?.xpath("//td[2]//div//a[1]")[count]
{
linkName = name.text
}
else{
throw MyError.FoundNil("name")
}
count = count + 1
}
catch{
print("Error: \(error)")
}
}
}
ようにそれをやって最初の数行のために働く、それは致命的なエラーで出てクラッシュし、
fatal error: Index out of range
それはキャッチまたは他の
に行かない私はまた、ガードを使用してみましたが、それはスローされません。いずれか
guard let name = row?.xpath("//td[2]//div//a[1]")[count] else{
throw MyError.FoundNil("name")
}
と私は50個のテーブルセル をチェックするために必要であればコメントで述べたように、私はあなたが実行時例外をキャッチすることはできません、それらのすべて
「範囲外のインデックス」または他のランタイムエラーSwiftでは、http://stackoverflow.com/questions/38737880/uncaught-error-exception-handling-in-swiftを比較してください。 –
問題は、「致命的なエラー:インデックスが範囲外です。」例外ではなく、単にメッセージでクラッシュしているだけです。 Objective C/Swiftのアーチファクトは1回、 'fatalError'はstdlibのどこにでもあり、Swift 2 +' do/catch'を使用してキャッチすることはできません。ですから、 'iOS dev'にうまくいくと、そういうものがかなりよく見えます。 – user28434
おかげで、多くのことが説明されています...図面ボードに戻って – Bicklp