Класс должен унаследовать от родительского класса, прежде чем соответствовать протоколу. В основном это можно сделать двумя способами.
Один из способов - сделать так, чтобы ваш класс унаследовал от них NSObject
и соответствовал им UITableViewDataSource
. Теперь, если вы хотите изменить функции в протоколе, вам нужно добавить ключевое слово override
перед вызовом функции, например
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
}
}
Однако это иногда делает ваш код беспорядочным, потому что у вас может быть много протоколов, которым нужно соответствовать, и каждый протокол может иметь несколько функций делегирования. В этой ситуации вы можете отделить код, соответствующий протоколу, от основного класса, используя extension
, и вам не нужно добавлять override
ключевое слово в расширение. Таким образом, эквивалент приведенного выше кода будет
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
}
}