1. ホーム
  2. ios

[解決済み] Swift 3 URLSession.shared() メンバー 'dataTask(with:completionHandler:) エラーへのあいまいな参照 (バグ)

2022-04-23 08:14:23

質問

こんにちは、私はswift2.2用のjsonパースコードが動作していますが、私はSwift3.0のためにそれを使用すると、このエラーが発生します。

ViewController.swift:132:31: メンバー 'dataTask(with:completionHandler:)' へのあいまいな参照

私のコードはこちら

   let listUrlString =  "http://bla.com?batchSize=" + String(batchSize) + "&fromIndex=" + String(fromIndex)
    let myUrl = URL(string: listUrlString);
    let request = NSMutableURLRequest(url:myUrl!);
    request.httpMethod = "GET";

    let task = URLSession.shared().dataTask(with: request) {
        data, response, error in

        if error != nil {
            print(error!.localizedDescription)
            DispatchQueue.main.sync(execute: {
                AWLoader.hide()
            })

            return
        }

        do {

            let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSArray

            if let parseJSON = json {

                var items = self.categoryList

                items.append(contentsOf: parseJSON as! [String])

                if self.fromIndex < items.count {

                    self.categoryList = items
                    self.fromIndex = items.count

                    DispatchQueue.main.async(execute: {

                        self.categoriesTableView.reloadData()

                        AWLoader.hide()

                    })
                }else if( self.fromIndex == items.count){


                    DispatchQueue.main.async(execute: {

                        AWLoader.hide()

                    })

                }



            }

        } catch {
            AWLoader.hide()
            print(error)

        }
    }

    task.resume()

アイデアをありがとうございました。

どのように解決するのですか?

コンパイラは関数のシグネチャに惑わされています。このように修正することができます。

let task = URLSession.shared.dataTask(with: request as URLRequest) {

しかし、quot;request" を次のようにキャストする必要はないことに注意してください。 URLRequest この署名では もし として先に宣言されています。 URLRequest ではなく NSMutableURLRequest :

var request = URLRequest(url:myUrl!)

との間の自動キャストです。 NSMutableURLRequest と新しい URLRequest が失敗しているため、ここでキャスティングを行うことを余儀なくされました。