ios - Uso ambiguo de ''sd_setImage(con: placeholderImage: completed:)'' con Swift 3
sdwebimage swift3 (2)
Agregar SDWebImageOptions
a la llamada de método corrige el problema:
imageView.sd_setImage(with: someUrl,
placeholderImage: someImage,
options: [],
completed: someCompletitionBlock)
Estoy haciendo la siguiente llamada usando SDWebImage
en mi imageView
, que funciona bien con Swift 2
pero da un error con XCode 8 beta 5
compilando con Swift 3
:
imageView.sd_setImage(with:url, placeholderImage:placeholder, completed: {
(image: UIImage?, error: Error?, cacheType: SDImageCacheType, imageURL: URL?) in
...
});
El error es:
Uso ambiguo de ''sd_setImage (con: placeholderImage: completed :)''
Sospecho que tengo algo mal en la firma del controlador completo, pero no puedo entender cuál debería ser la sintaxis. ¿Qué me estoy perdiendo?
El compilador Swift traduce los encabezados ObjC a Swift lo que lleva a nombrar colisiones:
UIImageView + WebCache.h:
o1) - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;
o2) - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;
Su única diferencia es el parámetro de options
adicionales en o2 .
Declaración Swift generada:
s1) open func sd_setImage(with url: URL!, placeholderImage placeholder: UIImage!, completed completedBlock: SDWebImage.SDWebImageCompletionBlock!)
s2) open func sd_setImage(with url: URL!, placeholderImage placeholder: UIImage!, options: SDWebImageOptions = [], completed completedBlock: SDWebImage.SDWebImageCompletionBlock!)
Debido a que las options
se tradujeron en un parámetro opcional (por defecto se le asignó una matriz vacía), llamar a s1 en Swift conduce a un uso ambiguo. Llamar a s2 podría simplemente tener la misma implementación. Al proporcionar tales métodos en el código Swift uno agregaría el parámetro de options
como opcional en una implementación de una sola función.
Solución
Como solución alternativa options
se podría establecer el parámetro de options
o se podría renombrar temporalmente o1 o o2 hasta que SDWebImage se traduzca a Swift.