Url imageLoader(SwiftImageLoader)
url 이미지를 TableView Cell에서 불러오기 위해 검색해서 찾아낸 오픈 소스 입니다.
알 ImageLoader 파일을 추가 해 주세요.
class ImageLoader {
let cache = NSCache<NSString, AnyObject>()
class var sharedLoader : ImageLoader {
struct Static {
static let instance : ImageLoader = ImageLoader()
}
return Static.instance
}
func imageForUrl(urlString: String, completionHandler: @escaping (_ image: UIImage?, _ url: String) -> ()) {
DispatchQueue.global(qos: .background).async {
let data: NSData? = self.cache.object(forKey: urlString as NSString) as? NSData
if let goodData = data {
let image = UIImage(data: goodData as Data)
DispatchQueue.main.async {
completionHandler(image, urlString)
}
return
}
let session = URLSession.shared
let request = URLRequest(url: URL(string: urlString)!);
session.dataTask(with: request) { data, response, error in
if (error != nil) {
completionHandler(nil, urlString)
return
}
if let data = data{
let image = UIImage(data: data)
self.cache.setObject(data as AnyObject, forKey: urlString as NSString)
DispatchQueue.main.async {
completionHandler(image, urlString)
}
}
}.resume()
}
}
}
사용하는 소스는...
ImageLoader.sharedLoader.imageForUrl(urlString:"http://www.abc.kr/image.jpg", completionHandler:{(image: UIImage?, url: String) in
self.imageView.image = image
})
완벽하진 않아요. 어쩌다 리스트에서 스크롤이 많이 될경우 이미지 위치가 달라질때가 있어요.....ㅠㅠ;