我正在使用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!)
收到错误。
编译器说:
无法将“数据”类型的值转换为预期的参数类型“数据”
我做错了什么?
答案 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。请不要使用此代码,因为它只是示例,并且不包含错误处理)