Pregunta Tipo "myViewController" no se ajusta al protocolo UIPIckerDataSource en Swift


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?

Screenshot for compile-time error


38
2017-07-26 12:11


origen


Respuestas:


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.


55
2017-07-26 12:27



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
}

15
2017-12-07 00:04



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{}

11
2017-07-26 12:33



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


0
2017-07-28 21:17



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.


0
2018-04-26 17:45