No, non esiste Swift equivalente a __attribute((objc_requires_super))
.
La funzione equivalente, Swift Attributes, non contiene tale attributo.
La sezione del Swift inheritance documentation in cui tale funzione sarebbe essere menzionato dice solo:
Quando si fornisce un metodo, una proprietà o di override pedice per una sottoclasse, a volte è utile usare l'esistente implementazione della superclasse come parte del tuo override.
Si noti che è possono prevenire l'override funzioni utilizzando final
, così si potrebbe efficace compiere ciò che si desidera, fornendo metodi overridable vuote che sono chiamati dai metodi non overridable:
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
}
}
Le sottoclassi quindi sovrascrivono i metodi sovrascrivibili e non importa se hanno chiamato super
o meno dall'attuazione della superclasse lo ione è vuoto.
Come note Bryan Chen nei commenti, questo si interrompe se la sottoclasse è sottoclasse.
Non posso dire se questo approccio è stilisticamente buono, ma è certamente possibile.
fonte
2014-12-06 05:27:32
[inviare una segnalazione di bug/richiesta di funzionalità] (https://bugreport.apple.com) –
Trovato questo su OpenRadar: [Attributo equivalente di NS_REQUIRES_SUPER] (http://openradar.appspot.com/17408107) –