对成员数据任务swift Xcode 8的模糊引用

时间:2016-09-26 12:32:08

标签: swift nsurl xcode8

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

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()

2 个答案:

答案 0 :(得分:2)

您可以使用NSURL

URL转换为.absoluteURL
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()
}

答案 1 :(得分: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采用类型为Data?URLResponse?Error?的3个参数。因此,无法应用类型为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()
}