Я столкнулся со странным поведением. Лучший способ, которым я могу это выразить, это ... Не переопределенные методы протокола в расширении класса не вызываются, в то время как суперкласс уже соответствует протоколу (через расширение) . Однако это происходит только при сборке с конфигурацией release
.
class A: UIViewController {}
extension A: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print("scrollViewDidScroll in superclass")
}
}
class B: A {
// A tableView (and its data source and delegate) is set here…
}
extension B: UITableViewDelegate {
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
super.scrollViewDidScroll(scrollView)
print("scrollViewDidScroll in subclass")
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print("scrollViewDidEndDragging")
}
}
Выход:
scrollViewDidScroll в суперклассе
scrollViewDidScroll в подклассе
scrollViewDidEndDragging
однако, если я соберу его с конфигурацией release
, будет вывод
scrollViewDidScroll в суперклассе
scrollViewDidScroll в подклассе
Я могу решить проблему, если я не использую расширение для подхода соответствия протокола в классе B
и просто использую вместо него обычный метод (поместите методы, реализующие протокол, в класс) .
Вопрос ... как получилось?