我刚刚更新了我的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()
答案 0 :(得分:2)
您可以使用NSURL
URL
转换为.absoluteURL
guard let url = URL.absoluteURL else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
//
}.resume()
更新
您的完成块的类型错误。您正在使用NSData
而不是Data
和NSError
而不是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()
}