no objetivo C:
@interface CustomDataSource : NSObject <UITableViewDataSource>
@end
em Swift:
class CustomDataSource : UITableViewDataSource {
}
No entanto, uma mensagem de erro será exibida:
- O tipo 'CellDatasDataSource' não está em conformidade com o protocolo 'NSObjectProtocol'
- O tipo 'CellDatasDataSource' não está em conformidade com o protocolo 'UITableViewDataSource'
Qual deve ser o caminho correto?
objective-c
swift
YuXuan Fu
fonte
fonte
Respostas:
Você deve herdar sua classe
NSObject
para estar em conformidade com oNSObjectProtocol
. As classes Vanilla Swift não. Mas muitas partes deUIKit
esperaNSObject
s.Mas isso:
É esperado. Você receberá o erro até que sua classe implemente todos os métodos necessários do protocolo.
Então comece a codificar :)
fonte
Uma classe deve herdar de uma classe pai antes de estar em conformidade com o protocolo. Existem principalmente duas maneiras de fazer isso.
Uma maneira é herdar
NSObject
e conformar a classe com a classeUITableViewDataSource
. Agora, se você deseja modificar as funções no protocolo, é necessário adicionar a palavra-chaveoverride
antes da chamada da função, como estaNo entanto, isso às vezes deixa seu código confuso, pois você pode ter muitos protocolos para conformidade e cada protocolo pode ter várias funções de delegação. Nessa situação, você pode separar o código em conformidade com o protocolo da classe principal usando
extension
e não precisa adicionaroverride
palavras-chave na extensão. Portanto, o equivalente ao código acima seráfonte
O Xcode 9 ajuda a implementar todos os métodos obrigatórios do Swift Datasource & Delegates.
Aqui está um exemplo de
UITableViewDataSource
:Mostra aviso / dica para implementar métodos obrigatórios:
Clique no botão 'Corrigir', ele adicionará todos os métodos obrigatórios no código:
fonte