nsattributedstring swift 3
Swift equivalente a__attribute((objc_requires_super))? (1)
No, no hay un Swift equivalente a __attribute((objc_requires_super))
.
La característica equivalente, Atributos de Swift , no contiene tal atributo.
La sección de la documentación de herencia de Swift en la que se mencionaría dicha característica dice solo:
Cuando proporciona un método, propiedad o anulación de subíndice para una subclase, a veces es útil usar la implementación de superclase existente como parte de su anulación.
Tenga en cuenta que puede evitar que se sobrescriban las funciones usando final
, por lo que podría lograr efectivamente lo que desea al proporcionar métodos anulables vacíos que son llamados por métodos no anulables:
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
}
}
Las subclases entonces anularían los métodos reemplazables, y no importaría si llamaran super
o no, ya que la implementación de la superclase está vacía.
Como señala Bryan Chen en los comentarios, esto se descompone si la subclase está subclasificada.
No hago afirmaciones de si este enfoque es estilísticamente bueno , pero ciertamente es posible.
¿Hay un Swift equivalente a
__attribute((objc_requires_super))
que da una advertencia si un método no llama su método super?
Básicamente, quiero advertir (o incluso mejor, lanzar un error de compilación) si un método invalidado no llama a su método super.