в Objective-C:
@interface CustomDataSource : NSObject <UITableViewDataSource>
@end
в Swift:
class CustomDataSource : UITableViewDataSource {
}
Однако появится сообщение об ошибке:
- Тип CellDatasDataSource не соответствует протоколу NSObjectProtocol.
- Тип CellDatasDataSource не соответствует протоколу UITableViewDataSource
Каким должен быть правильный путь?
objective-c
swift
Юйсюань Фу
источник
источник
Ответы:
Вы должны сделать свой класс унаследованным от,
NSObject
чтобы соответствоватьNSObjectProtocol
. Классы Vanilla Swift - нет. Но многие частиUIKit
ожидаютNSObject
годовщины.Но это:
Ожидается. Вы будете получать сообщение об ошибке, пока ваш класс не реализует все необходимые методы протокола.
Так что кодируйте :)
источник
Класс должен унаследовать от родительского класса, прежде чем соответствовать протоколу. В основном это можно сделать двумя способами.
Один из способов - сделать так, чтобы ваш класс унаследовал от них
NSObject
и соответствовал имUITableViewDataSource
. Теперь, если вы хотите изменить функции в протоколе, вам нужно добавить ключевое словоoverride
перед вызовом функции, напримерОднако это иногда делает ваш код беспорядочным, потому что у вас может быть много протоколов, которым нужно соответствовать, и каждый протокол может иметь несколько функций делегирования. В этой ситуации вы можете отделить код, соответствующий протоколу, от основного класса, используя
extension
, и вам не нужно добавлятьoverride
ключевое слово в расширение. Таким образом, эквивалент приведенного выше кода будетисточник
Xcode 9 помогает реализовать все обязательные методы Swift Datasource & Delegates.
Вот пример
UITableViewDataSource
:Показывает предупреждение / подсказку для реализации обязательных методов:
Нажмите кнопку «Исправить», все обязательные методы будут добавлены в код:
источник