en Objective-C:
@interface CustomDataSource : NSObject @end
à Swift:
class CustomDataSource : UITableViewDataSource { }
Cependant, un message d’erreur apparaîtra:
Quelle devrait être la bonne façon?
Le type ‘CellDatasDataSource’ n’est pas conforme au protocole ‘NSObjectProtocol’
Vous devez rendre votre classe héritée de NSObject
pour vous conformer au NSObjectProtocol
. Les classes Vanilla Swift ne le font pas. Mais de nombreuses parties d’ UIKit
attendent des NSObject
.
class CustomDataSource : NSObject, UITableViewDataSource { }
Mais ça:
Le type ‘CellDatasDataSource’ n’est pas conforme au protocole ‘UITableViewDataSource’
Devrait. Vous obtiendrez l’erreur jusqu’à ce que votre classe implémente toutes les méthodes requirejses du protocole.
Alors, obtenez le codage 🙂
Une classe doit hériter d’une classe parente avant d’être conforme au protocole. Il y a principalement deux manières de le faire.
Une façon consiste à faire en sorte que votre classe hérite de NSObject
et soit conforme à UITableViewDataSource
. Maintenant, si vous souhaitez modifier les fonctions du protocole, vous devez append le override
mot clé avant l’appel de fonction, comme ceci
class CustomDataSource : NSObject, UITableViewDataSource { override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) // Configure the cell... return cell } }
Cependant, votre code est parfois désordonné car vous pouvez avoir plusieurs protocoles à respecter et chaque protocole peut avoir plusieurs fonctions de délégué. Dans cette situation, vous pouvez séparer le code conforme au protocole de la classe principale en utilisant l’ extension
, et vous n’avez pas besoin d’append de mot clé de override
dans l’extension. Donc, l’équivalent du code ci-dessus sera
class CustomDataSource : NSObject{ // Configure the object... } extension CustomDataSource: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) // Configure the cell... return cell } }
Xcode 9, aide à implémenter toutes les méthodes obligatoires de Swift Datasource & Delegates.
Voici l’exemple de UITableViewDataSource
:
Affiche un avertissement / un conseil pour implémenter des méthodes obligatoires:
Cliquez sur le bouton ‘Fix’, il appenda toutes les méthodes obligatoires dans le code: