Je viens de créer une nouvelle classe dans Swift, elle s'appelle myViewController
et c'est une UIViewController
. Maintenant, j'essaie d'en faire un UIPickerViewDelegate et DataSource mais j'ai une erreur étrange
import UIKit
class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
...
}
Type "myViewController" does not conform to protocol UIPIckerDataSource
apparaît sur UIPickerViewDataSource.
Est-ce un bug de Xcode-Beta 3 ??
Si vous souhaitez vous conformer à ces protocoles, vous devez implémenter toutes les méthodes requises de UIPickerViewDataSource
et UIPickerViewDelegate
.
Swift ressemble plus à Java quand il s’agit de protocoles parce que si vous n’implémentez pas toutes les méthodes requises déclarées par un protocole, vous obtiendrez une erreur de compilation au lieu d’une exception d’exécution.
Fix-it dans XCode 8.1 insère une version obsolète de la méthode ci-dessous si vous utilisez Swift 3:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return componentNumber
}
En XCode 10.0+
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return componentNumber
}
Implémentez la méthode requise de UIPickerDataSource
comme dans la documentation.
La source de données fournit à la vue sélecteur le nombre de composants, et le nombre de lignes dans chaque composant, pour afficher le sélecteur affiche les données. Les deux méthodes de ce protocole sont obligatoires.
Donc, vous devez implémenter ces méthodes
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
Mon problème était que j'avais override
devant la fonction d'implémentation, où Swift ne considère pas que les implémentations de méthodes de protocole sont des substitutions ( même ). Le simple fait de supprimer le mot clé override
a résolu le problème.
Mon problème est le nom de la méthode du protocole est illégal,
@protocol ContactsSelectDelegate <NSObject>
- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;
@end
Ici, Tags:
devrait être tags:
.
J'espère que ma réponse est utile.