Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【Swift】Ambiguous reference to member 'dataTask(with:completionHandler:)'の解決方法

【Swift】UIImageViewにURLの画像を表示する(2) - Swift・iOSの実装時に出たエラーとその解決方法についてメモ。ただのケアレスミスなのですが、一応記録に残します。

 

■開発環境

Xcode 10.1

・Swift 4.2.1

 

■エラーが出た時のコード

このコード一目見て普通にエラー箇所に気付くかと思いますが、、なぜ気づかなかったのか謎です笑

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let url = (string: "{画像URL}")
        
        let task = URLSession.shared.dataTask(with: url) { data, responds, error in
            if let error = error {
                print(error.localizedDescription)
                return
            }
            
            guard let data = data, let response = responds as? HTTPURLResponse else {
               return
            }
            
            if response.statusCode == 200 {
                print(data)
            } else {
                print("サーバエラー")
            }
        }
        task.resume()
    }
}

 

■エラーメッセージ

Ambiguous reference to member 'dataTask(with:completionHandler:)'

訳:「'dataTask(with:completionHandler :)'へのあいまいな参照」

 

■なにがあいまい?

エラー発生箇所の「dataTask(with:completionHandler :)」のドキュメント確認

dataTask(with:completionHandler:) - URLSession | Apple Developer Documentation

Declaration欄

func dataTask(with request: URLRequest, 
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask

第一引数がURLRequest型。型は合っているか?

該当のコードの第一引数

let url = (string: "{画像URL}")
        
let task = URLSession.shared.dataTask(with: url) { data, responds, error in

!?

let url = (string: "{画像URL}")

URLRequest型になっていない笑

あいまいもなにも・・・笑

 

■修正

画像URLをURLRequest型にすればエラー解消されます。

 let url = URL(string: "{画像URL}")

 

■関連リンク

dataTask(with:completionHandler:) - URLSession | Apple Developer Documentation

ios - Swift 3 URLSession.shared() Ambiguous reference to member 'dataTask(with:completionHandler:) error (bug) - Stack Overflow