Я думаю, что лучшим вариантом является создание отдельного класса (в данном случае Image
), который подтвердит протокол Viewable
:
class Image: Viewable {
var type: ViewableType {
return .image
}
let assetID: String? = UUID().uuidString
let placeholder = UIImage()
let url: String?
init(url: String) {
self.url = url
}
func media(_ completion: @escaping (_ image: UIImage?, _ error: NSError?) -> Void) {
guard let url = url else {
completion(nil, nil)
return
}
guard let imageURL = URL(string: url) else {
completion(nil, nil)
return
}
URLSession.shared.dataTask(with: imageURL) { (data, response, error) in
DispatchQueue.main.async { //all changes to UI must be called on main thread
if let error = error {
print("Error: \(error)")
completion(nil, error)
return
}
completion(UIImage(data: data), nil)
}
}.resume()
}
}
, и вам нужно будет изменить цикл на:
for image in images{
viewableImages.append(Image(url: image))
}