Ich erstelle in Swift eine neue Klasse, die myViewController
heißt und eine UIViewController
ist. Nun versuche ich es zu einem UIPickerViewDelegate und einer DataSource zu machen, aber Ich habe einen seltsamen Fehler
import UIKit
class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
...
}
Es sagt Type "myViewController" does not conform to protocol UIPIckerDataSource
über die UIPickerViewDataSource.
Ist es ein Fehler von Xcode-Beta 3 ??
Sie müssen alle erforderlichen Methoden von UIPickerViewDataSource
und UIPickerViewDelegate
implementieren, wenn Sie diese Protokolle einhalten möchten.
Swift ähnelt Java in Bezug auf Protokolle. Wenn Sie nicht alle erforderlichen Methoden implementieren, die von einem Protokoll deklariert werden, erhalten Sie einen Kompilierungszeitfehler anstelle einer Laufzeitausnahme.
Fix-it in XCode 8.1 fügt eine veraltete Version der folgenden Methode ein, wenn Sie Swift 3 verwenden:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return componentNumber
}
In XCode 10.0+
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return componentNumber
}
Implementieren Sie die erforderliche Methode von UIPickerDataSource
wie in der Dokumentation.
Die Datenquelle versorgt die Picker-Ansicht mit der Nummer Komponenten und die Anzahl der Zeilen in jeder Komponente zur Anzeige von die Daten der Picker-Ansicht. Beide Methoden in diesem Protokoll sind erforderlich.
Daher müssen Sie diese Methoden implementieren
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
Mein Problem war, dass ich override
vor der Implementierungsfunktion hatte, wobei Swift Protokollimplementierungsimplementierungen nicht als Überschreibungen ( same ) betrachtet. Durch das Entfernen des Schlüsselworts override
wurde das Problem behoben.
Mein Problem ist, dass der Methodenname des Protokolls illegal ist.
@protocol ContactsSelectDelegate <NSObject>
- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;
@end
Hier sollte Tags:
tags:
sein.
Ich hoffe, meine Antwort ist hilfreich.