w celu C:
@interface CustomDataSource : NSObject <UITableViewDataSource>
@end
w Swift:
class CustomDataSource : UITableViewDataSource {
}
Jednak pojawi się komunikat o błędzie:
- Typ „CellDatasDataSource” nie jest zgodny z protokołem „NSObjectProtocol”
- Typ „CellDatasDataSource” nie jest zgodny z protokołem „UITableViewDataSource”
Jaki powinien być właściwy sposób?
objective-c
swift
YuXuan Fu
źródło
źródło
Odpowiedzi:
Musisz sprawić, aby Twoja klasa dziedziczyła z,
NSObject
aby była zgodna zNSObjectProtocol
. Klasy Vanilla Swift nie. Ale wiele częściUIKit
oczekiwańNSObject
.Ale to:
Jest oczekiwany. Błąd pojawi się, dopóki Twoja klasa nie zaimplementuje wszystkich wymaganych metod protokołu.
Więc zacznij kodować :)
źródło
Klasa musi dziedziczyć po klasie nadrzędnej, zanim będzie zgodna z protokołem. Są na to głównie dwa sposoby.
Jednym ze sposobów jest posiadanie przez klasę dziedziczenia
NSObject
i dostosowywania się doUITableViewDataSource
siebie. Teraz, jeśli chcesz zmodyfikować funkcje w protokole, musisz dodać słowo kluczoweoverride
przed wywołaniem funkcji, tak jak toJednak czasami powoduje to bałagan w kodzie, ponieważ możesz mieć wiele protokołów do dostosowania, a każdy protokół może mieć kilka funkcji delegowanych. W tej sytuacji możesz oddzielić kod zgodny z protokołem od głównej klasy za pomocą
extension
i nie musisz dodawaćoverride
słowa kluczowego w rozszerzeniu. Więc odpowiednikiem powyższego kodu będzieźródło
Xcode 9 pomaga we wdrażaniu wszystkich obowiązkowych metod Swift Datasource & Delegates.
Oto przykład
UITableViewDataSource
:Pokazuje ostrzeżenie / podpowiedź do wdrożenia obowiązkowych metod:
Kliknij przycisk `` Napraw '', doda wszystkie obowiązkowe metody w kodzie:
źródło