ios - example - El tipo "myViewController" no cumple con el protocolo UIPIckerDataSource en Swift
uipickerview swift 4 example (5)
Fix-it en XCode 8.1 inserta una versión obsoleta del siguiente método si está utilizando Swift 3:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return componentNumber
}
En XCode 10.0+
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return componentNumber
}
Acabo de crear una nueva clase en Swift, se llama myViewController
y es un UIViewController
. Ahora estoy intentando convertirlo en un UIPickerViewDelegate y DataSource pero tengo un error extraño
import UIKit
class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
...
}
Dice que el Type "myViewController" does not conform to protocol UIPIckerDataSource
sobre UIPickerViewDataSource.
¿Es un error de Xcode-Beta 3?
Implementar el método requerido de UIPickerDataSource
como en la documentación.
La fuente de datos proporciona a la vista del selector el número de componentes y el número de filas en cada componente para mostrar los datos de la vista del selector. Se requieren ambos métodos en este protocolo.
Así que necesitas implementar estos métodos.
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
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í, las Tags:
deben ser tags:
Espero que mi respuesta sea de ayuda.
Mi problema fue que tuve una override
frente a la función de implementación, donde Swift no considera que las implementaciones de los métodos de protocolo sean anulaciones (las same ). Simplemente sacando la palabra clave override
solucionó el problema.
UIPickerViewDataSource
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.