【问题标题】:ambiguous reference to member datatask swift Xcode 8对成员数据任务 swift Xcode 8 的模棱两可的引用
【发布时间】:2016-09-26 12:32:07
【问题描述】:

我刚刚更新了我的 Xcode,并一直在尝试了解更多有关它的信息。这是我的 Collection View Cell 代码。我正在尝试从 URL 获取数据,但我一直对这个错误感到恼火。我在这里尝试了所有解决方案,但它们具有不同的功能结构。其他解决方案也不起作用。

import UIKit


class PersonCell: UICollectionViewCell {

@IBOutlet weak var personImage : UIImageView!



    func ConfigureCell (imgURL : String)
{

}

    func DownloadImage ( url : NSURL)
{

}

    func GetDatafromURL (URL : NSURL , completion :   @escaping ((   _ data :     NSData? , _ response : URLResponse? ,  _ error : NSError?) -> Void))
{
        URLSession.shared.dataTask(with: URL) { (data ,  response , error) in     
            completion (data , response, error)     
            }.resume()   
}
}

教程视频中的代码是这样的

    func GetDatafromURL (URL : NSURL , completion : ((  data : NSData? , response : NSURLResponse? ,  error : NSError?) -> Void))
{


    NSURLSession.sharedSession.dataTaskWithURL( URL) { (data ,  response , error) in

        completion(data : data , responce : response, error : error)


        }.resume()

【问题讨论】:

    标签: swift nsurl xcode8


    【解决方案1】:

    您可以使用.absoluteURLNSURL 转换为URL

    guard let url = URL.absoluteURL else { return }
    
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        //
    }.resume()
    

    更新

    您的完成块有错误的类型。您使用的是NSData 而不是DataNSError 而不是Error。下面是它的示例。

    func getData(from url: URL, completion: @escaping (_ data: Data?, _ response: URLResponse?, _ error: Error?) -> Void)
    {
        URLSession.shared.dataTask(with: url) { data, response, error
            completion(data, response, error)
        }.resume()
    }
    

    【讨论】:

    • 您的两个解决方案都给了我同样的错误,我无法使用类型为 '(with : URL,Data?,URLResponse>,Error?) 的参数调用“dataTask”
    【解决方案2】:

    请查看最新的参考资料。

    func dataTask(with: URL, completionHandler: (Data?, URLResponse?, Error?) -> Void)

    声明

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

    在 Swift 3 中,dataTask(with:completionHandler:) 的 completionHandler 接受 3 个参数,类型为 Data?URLResponse?Error?。所以,你方法的completion,类型为(NSData?,URLResponse?,NSError?) -> Void,不能应用。

    它以URL 作为它的第一个参数。

    (感谢 vadian,他在这里提出了所有需要的东西。)

    所以,你的GetDatafromURL 需要是这样的:

    func GetDatafromURL(url: URL, completion: @escaping ((_ data: Data?, _ response: URLResponse?,  _ error: Error?) -> Void))
    {
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            completion (data , response, error)
        }.resume()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2015-09-20
      • 2017-02-07
      相关资源
      最近更新 更多