Ответ 1
Нет, нет эквивалента Swift для __attribute((objc_requires_super))
.
Эквивалентная функция Swift Attributes не содержит такого атрибута.
Раздел Swift-документация по наследованию, где упоминается такая функция, говорит только:
Когда вы предоставляете метод, свойство или переопределение индекса для подкласса, иногда полезно использовать существующую реализацию суперкласса как часть вашего переопределения.
Обратите внимание, что может предотвращать переопределение функций с помощью final
, чтобы вы могли эффективно выполнять то, что хотите, предоставляя пустые переопределяемые методы, вызываемые неперекрываемыми методами:
class AbstractStarship {
var tractorBeamOn = false
final func enableTractorBeam() {
tractorBeamOn = true
println("tractor beam successfully enabled")
tractorBeamDidEnable()
}
func tractorBeamDidEnable() {
// Empty default implementation
}
}
class FancyStarship : AbstractStarship {
var enableDiscoBall = false
override func tractorBeamDidEnable() {
super.tractorBeamDidEnable() // this line is irrelevant
enableDiscoBall = true
}
}
Подкласс затем переопределяет переопределяемые методы, и не имеет значения, вызывали ли они super
или нет, поскольку реализация суперкласса пуста.
Как Bryan Chen отмечает в комментариях, это ломается, если подкласс подклассов.
Я не претендую на то, что этот подход стилистически хорош, но это, безусловно, возможно.