web-dev-qa-db-ja.com

swiftyjson-呼び出しはスローできますが、「try」とマークされ、エラーは処理されません

Swiftyjsonを使用しようとしていますが、エラーが発生します。

呼び出しはスローできますが、「try」とマークされ、エラーは処理されません。

ソースJSONが適切であることを検証しました。検索してみましたが、この問題の解決策が見つかりません

import Foundation


class lenderDetails
{

func loadLender()
{

    let lenders = ""

    let url = URL(string: lenders)!
    let session =  URLSession.shared.dataTask(with: url)
    {
        (data, response, error) in


        guard let data = data else
        {
            print ("data was nil?")
            return
        }

        let json = JSON(data: data)
        print(json)
    }

    session.resume()
}
}

すべての助けてくれてありがとう!

11
user7748962

do-catchブロックにラップする必要があります。あなたの場合:

do {
    let session =  URLSession.shared.dataTask(with: url) {
        (data, response, error) in
            guard let data = data else {
            print ("data was nil?")
            return
        }

        let json = JSON(data: data)
        print(json)
    }
} catch let error as NSError {
    // error
}
3
Rashwan L

SwiftyJSON初期化子throws、宣言は

public init(data: Data, options opt: JSONSerialization.ReadingOptions = []) throws

次の3つのオプションがあります。

  1. 使う do - catchブロックしてエラーを処理します(推奨されるエラー)。

    do {
       let json = try JSON(data: data)
       print(json)
    } catch {
       print(error)
       // or display a dialog
    }
    
  2. エラーを無視し、オプションで結果をバインドします(エラーが重要でない場合に役立ちます)。

    if let json = try? JSON(data: data) {
       print(json)
    }
    
  3. 結果を強制的にアンラップします

    let json = try! JSON(data: data)
    print(json)
    

    このオプションは、試行が失敗しないことが保証されている場合にのみ使用してください(この場合ではありません!)。 Try!は、ディレクトリがフレームワークがとにかく作成するデフォルトのディレクトリの1つである場合、たとえばFileManagerで使用できます。

詳細については、 Swift Language Guide-Error Handling をご覧ください。

48
vadian

おそらく、do{} catch{}ブロックを実装する必要があります。 doブロック内では、tryでthrowable関数を呼び出す必要があります。

0
noob