对成员数据任务的引用不明确 swift Xcode 8
ambiguous reference to member datatask swift Xcode 8
我刚刚更新了我的 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()
您可以使用 .absoluteURL
将 NSURL
转换为 URL
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()
}
请查看最新参考。
func dataTask(with: URL, completionHandler: (Data?, URLResponse?, Error?) -> Void)
Declaration
func dataTask(with url: URL,
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
在Swift 3中,dataTask(with:completionHandler:)
的completionHandler接受3个类型为Data?
、URLResponse?
和Error?
的参数。因此,无法应用类型为 (NSData?,URLResponse?,NSError?) -> Void
的方法 completion
。
第一个参数是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()
}
我刚刚更新了我的 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()
您可以使用 .absoluteURL
NSURL
转换为 URL
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()
}
请查看最新参考。
func dataTask(with: URL, completionHandler: (Data?, URLResponse?, Error?) -> Void)
Declaration
func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
在Swift 3中,dataTask(with:completionHandler:)
的completionHandler接受3个类型为Data?
、URLResponse?
和Error?
的参数。因此,无法应用类型为 (NSData?,URLResponse?,NSError?) -> Void
的方法 completion
。
第一个参数是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()
}