我正在使用此扩展程序
extension UIImage {
public static func loadFrom(url: URL, completion: @escaping (_ image: UIImage?) -> ()) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
completion(UIImage(data: data))
}
} else {
DispatchQueue.main.async {
completion(nil)
}
}
}
}
}
我想要可以通过本地存储的图像文件名从Web URL加载的东西
本地位置是指由imagePickerController
拾取并保存到coreData
的图像,我需要将它们从collection view
加载到CoreData
中。
提出保存和加载本地图像的最佳方法,因为网络图像可以正常工作。
本地图片位置:
file:/// Users / abhishek / Library / Developer / CoreSimulator / Devices / E189ACEA-3A22-41C9-94DD-06ACE5A8D16D / data / Containers / Data / Application / 96851D78-3BD6-4CAA-83AF-0E752FEF10B1 / tmp / 542CB563-6233-4C96-9ACA-25984F3CBF98.jpeg
Web URL示例为here
答案 0 :(得分:1)
您可以尝试一下。 https://github.com/SDWebImage/SDWebImage。该库可以满足您的需求,并且可以缓存图像。
答案 1 :(得分:1)
extension UIImage {
public static func loadFrom(url: URL, completion: @escaping (_ image: UIImage?) -> ()) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
completion(UIImage(data: data))
}
} else {
DispatchQueue.main.async {
completion(nil)
}
}
}
}
}
答案 2 :(得分:0)
接受URL
参数,而不是接受loadFrom
方法中的String
参数。
此String
可以是urlString
或image
中Assets
的名称。
extension UIImage {
public static func loadFrom(urlString: String, completion: @escaping (_ image: UIImage?) -> ()) {
if let image = UIImage(named: urlString) {
DispatchQueue.main.async {
completion(image)
}
} else {
if let url = URL(string: urlString) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
completion(UIImage(data: data))
}
} else {
DispatchQueue.main.async {
completion(nil)
}
}
}
}
}
}
}
在上面的代码中,首先检查名称为image
的{{1}}是否存在于项目本身中。如果不是,则从urlString
创建一个URL
,然后从该urlString
获取image
。
用法:
URL
答案 3 :(得分:0)
解决了,我没有传递本地URL,而是过滤了它的名称,现在我传递了名称,在扩展方面做了一些更改
extension UIImage {
public static func loadFrom(url: String, completion: @escaping (_ image: UIImage?) -> ()) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: URL(string: url)!) {
DispatchQueue.main.async {
completion(UIImage(data: data))
}
}
else {
DispatchQueue.main.async {
let documentDirectory = FileManager.SearchPathDirectory.documentDirectory
let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)
if let dirPath = paths.first {
let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("\(url)")
let image = UIImage(contentsOfFile: imageURL.path)
completion(image)
}
}
}
}
}
}
现在它就像一个魅力
我从here
寻求帮助