0

SODA Client for swift (作成者 Socrata) を使用しています。XCode 7 と Swift 2 に更新したところ、いくつかの問題が見つかりました。私が解決できなかったのは、エラーが見つかったときの完了ハンドラーのケースです。エラーを取得してメインスレッドに戻るはずの行「syncCompletion(.Error (reqError))」を受け入れていません。

ここで同じ説明の「式のタイプがあいまいであり、コンテキストがありません」というエラーが多数見られましたが、完了ハンドラーではなく、do - catch を使用しているものを見ましたが、これは異なります。これを変更する方法を見つけるのに十分な速さを知りません。

Swift 2で一部の型が変更される可能性があるため、コードを書き直す必要があると考える回答もありますが、どこから書き直すべきかわかりません。

よろしくお願いします。

  var task = session.dataTaskWithRequest(request, completionHandler: { data, response, reqError in

        // We sync the callback with the main thread to make UI programming easier
        let syncCompletion = { res in NSOperationQueue.mainQueue().addOperationWithBlock { completionHandler (res) } }

        // Give up if there was a net error
        if reqError != nil {
            syncCompletion(.Error (reqError))
            return
        }

        // Try to parse the JSON
        //            println(NSString (data: data, encoding: NSUTF8StringEncoding))

        var jsonError: NSError?
        var jsonResult: AnyObject!
        do {
            jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
        } catch var error as NSError {
            jsonError = error
            jsonResult = nil
        } catch {
            fatalError()
        }
        if let error = jsonError {
            syncCompletion(.Error (error))
            return
        }

        // Interpret the JSON
        if let a = jsonResult as? [[String: AnyObject]] {
            syncCompletion(.Dataset (a))
        }
        else if let d = jsonResult as? [String: AnyObject] {
            if let e : AnyObject = d["error"] {
                if let m : AnyObject = d["message"] {
                    syncCompletion(.Error (NSError(domain: "SODA", code: 0, userInfo: ["Error": m])))
                    return
                }
            }
            syncCompletion(.Dataset ([d]))
        }
        else {
            syncCompletion(.Error (NSError(domain: "SODA", code: 0, userInfo: nil)))
        }
    })
4

1 に答える 1

0

解決したので、次を置き換えました:

if reqError != nil 

if let error = reqError 

と:

 syncCompletion(.Error (reqError)) 

 syncCompletion(.Error (error))
于 2015-10-28T17:17:53.123 に答える