2017-07-09 4 views
0

swift3でエラー処理が混乱しました。 IN 1Swift 3のエラー処理に混乱しました

class MyClass { 
     enum error: Error 
     { 
     case nilString 
     } 
     func findURL() { 
      do { 
       let opt = try HTTP.GET(url_adr!) 
       opt.start { response in 
        if let err = response.error { 
         print("error: \(err.localizedDescription)") 
         return //also notify app of failure as needed 
        } 
        do 
        { 
/* This is func1. and got error. I want to if this function has error then go next function. */ 
          try self.stringOperation(data: response.description) 
         } 
         catch{ 
          print("doesn't work on func1. trying 2nd func") 
          self.stringOperation2(data:response.descritption) 
         } 

        } 
       } catch let error { 
        print("got an error creating the request: \(error)") 
       } 
     } 
     func stringOperation(data:String)throws -> Bool{ 
       do{ 
/** 1 **/ 
         if let _:String = try! data.substring(from: data.index(of: "var sources2")!){ 
          print("its done") 
         }else{ 
         throw error.nilString 
      } 

: 「致命的なエラー:私はこのラインでこの致命的なエラーを得た予想外に、私は私が私がしようとするものをお見せしましょう 「XX関数がエラーを得たならば、YY機能を試してみてください」のようにやってみてくださいオプション値をアンラッピングしている間はゼロが見つかりました "とプログラムがクラッシュしました。 エラー処理を私のグーグルが理解し、私のコードに適用しようとしました。しかし、まだ成功していない。誰かが私が間違って説明したことができますか?

追加情報:.substring(from:...)、および.index(of: "str")の文字列拡張を取得しました。だから、これらの行はあなたを混乱させません。あなたが代わりに

if let _: String= try! data.substring... 

を持っている一般的なルールとして

+0

プログラムがクラッシュした行番号、または見つからない行番号を –

+0

エラー行が "/ ** 1 ** /"メッセージの下に...ただし、tbogosiaの答えが解決されました...ありがとう – Antiokhos

答えて

1

、アンラップ力を(!)を使用して回避しようとは、

if let index = data.index(of: "var sources2"), 
    let _: String = try? data.substring(from: index) { ... } else { ... } 

あなたがあなたを引き起こしている可能性のある2つの力のアンラップを削除する方法を使用しますクラッシュ。あなたはすでにのnil値をキャッチするための保護を持っているので、条件付きアンラッピングを使って最大限に活用することができます。

+0

歓声....ありがとうございました! – Antiokhos

関連する問題