Solo creo una nueva clase en Swift, se llama myViewController
y es un UIViewController
.
Ahora intento convertirlo en UIPickerViewDelegate y DataSource, pero tengo un error extraño
import UIKit
class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
...
}
Dice Type "myViewController" does not conform to protocol UIPIckerDataSource
sobre el UIPickerViewDataSource.
¿Es un error de Xcode-Beta 3?

Necesita implementar todos los métodos requeridos de UIPickerViewDataSource
y UIPickerViewDelegate
, si desea cumplir con estos protocolos.
Swift es más como Java cuando se trata de protocolos porque si no implementa todos los métodos requeridos declarados por un protocolo, obtendrá un error de tiempo de compilación en lugar de una excepción de tiempo de ejecución.
Fix-it en XCode 8.1 inserta una versión obsoleta del método a continuación si está utilizando Swift 3:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return componentNumber
}
En XCode 10.0+
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return componentNumber
}
Implementar el método requerido de UIPickerDataSource
como en la documentación.
La fuente de datos proporciona la vista del selector con el número de
componentes, y el número de filas en cada componente, para mostrar
el selector visualiza los datos. Ambos métodos en este protocolo son obligatorios.
Entonces necesitas implementar estos métodos
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
Mi problema fue que tuve override
frente a la función de implementación, donde Swift no considera que las implementaciones de métodos de protocolo sean anulaciones (mismo) Solo sacando el override
la palabra clave solucionó el problema
Mi problema es que el nombre del método del protocolo es ilegal,
@protocol ContactsSelectDelegate <NSObject>
- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;
@end
Aquí, Tags:
debiera ser tags:
.
Espero que mi respuesta sea útil.