en Objective-C:
@interface CustomDataSource : NSObject <UITableViewDataSource>
@end
dans Swift:
class CustomDataSource : UITableViewDataSource {
}
Cependant, un message d'erreur apparaîtra:
- Le type 'CellDatasDataSource' n'est pas conforme au protocole 'NSObjectProtocol'
- Le type 'CellDatasDataSource' n'est pas conforme au protocole 'UITableViewDataSource'
Quelle devrait être la bonne manière?
objective-c
swift
YuXuan Fu
la source
la source
Réponses:
Vous devez faire hériter de votre classe
NSObject
pour vous conformer à laNSObjectProtocol
. Les classes Vanilla Swift ne le font pas. Mais de nombreuses parties de l'UIKit
attente de l'NSObject
art.Mais ça:
Devrait. Vous obtiendrez l'erreur jusqu'à ce que votre classe implémente toutes les méthodes requises du protocole.
Alors, codez :)
la source
Une classe doit hériter d'une classe parente avant de se conformer au protocole. Il existe principalement deux façons de procéder.
Une façon est que votre classe hérite
NSObject
et se conforme à l'UITableViewDataSource
ensemble. Maintenant, si vous souhaitez modifier les fonctions dans le protocole, vous devez ajouter un mot-cléoverride
avant l'appel de la fonction, comme ceciCependant, cela rend parfois votre code confus car vous pouvez avoir de nombreux 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
extension
, et vous n'avez pas besoin d'ajouter deoverride
mot-clé dans l'extension. Donc l'équivalent du code ci-dessus serala source
Xcode 9, aide à implémenter toutes les méthodes obligatoires de Swift Datasource & Delegates.
Voici un exemple de
UITableViewDataSource
:Affiche un avertissement / un conseil pour implémenter les méthodes obligatoires:
Cliquez sur le bouton 'Fix', il ajoutera toutes les méthodes obligatoires dans le code:
la source