Swift 4:无法将'Data'类型的值转换为预期的参数类型'Data'

时间:2017-11-11 04:41:57

标签: ios uiimage swift4 xcode9

我正在使用Xcode 9,Swift 4。

我正在尝试使用以下代码在URL中显示ImageView中的图像:

func getImageFromUrl(sourceUrl: String) -> UIImage {
        let url = URL(string: sourceUrl)
        let dict = NSDictionary(contentsOf: url!)
        let data = Data(dictionary: dict!)
        let image = UIImage(data: data!)
        return image
}

但我在let image = UIImage(data: data!)收到错误。

编译器说:

  

无法将“数据”类型的值转换为预期的参数类型“数据”

我做错了什么?

4 个答案:

答案 0 :(得分:1)

/// Returns nil if image data is not correct or some network error has happened
func getImageFromUrl(sourceUrl: String) -> UIImage? {
  if let url = URL(string: sourceUrl) {
    if let imageData = try? Data(contentsOf:url) {
      return UIImage(data: imageData)
    }
  }
  return nil
}

答案 1 :(得分:1)

请检查项目中是否有任何具有数据(已创建)的类名。 由于类名冲突,swift可能无法识别Foudation的Data类或您的Project的Data类。

答案 2 :(得分:0)

试试这个,

func getImageFromUrl(sourceUrl: String) -> UIImage {
    let imageData = try! Data(contentsOf: (URL(string: sourceUrl))!)
    let image = UIImage(data: imageData )
    return image!
}

//您可以检查 nil 的另一个版本的代码

func getImageFromUrl(sourceUrl: String) -> UIImage? {
  if let imageData = try? Data(contentsOf:URL(string: sourceUrl)) {
    return UIImage(data: imageData)
   }
 return nil
}

答案 3 :(得分:0)

我在网络通话中遇到了类似的问题。我必须显式键入Foundation.Data以确保没有发生任何奇怪的名称空间。

  func getMediaItems(completion: @escaping (Foundation.Data?, ResponseError?) -> ()) {
         let session = URLSession(configuration: .default)
         let url = self.makeURL()
         let task = session.dataTask(with: url, completionHandler: 
              { data, response, error in
                   if let imageData = data {
                        completion(data, nil) // had error here
             //etc, etc...

非常烦人。我不确定是否丢失了某些内容,或者它是Swift 4错误,但似乎可以解决问题。没有“基金会”,我在completion(data,nil)拥有相同的区域 (ps。请不要使用此代码,因为它只是示例,并且不包含错误处理)