web-dev-qa-db-fra.com

Comment déprécier manuellement les membres

Contrairement à Objective-C, Swift n’a pas de préprocesseur, existe-t-il donc encore un moyen de déprécier manuellement les membres d’une classe?

Je cherche quelque chose de semblable à ceci:

-(id)method __deprecated;
150
Atomix

Vous pouvez utiliser la balise Disponible, par exemple:

@available(*, deprecated)
func myFunc() { 
    // ...
}

Où * est la plate-forme (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * pour tous, etc.).

Vous pouvez également spécifier la version de la plate-forme à partir de laquelle il était introduced, deprecated, obsoleted, renamed et un message:

@available(iOS, deprecated:6.0)
func myFunc() { 
    // calling this function is deprecated on iOS6+
}

Or

@available(iOS, deprecated: 6.0, obsoleted: 7.0, message: "Because !")
func myFunc() {
    // deprecated from iOS6, and obsoleted after iOS7, the message "Because !" is displayed in XCode warnings
}

Si votre projet cible plusieurs plates-formes, vous pouvez utiliser plusieurs balises comme suit:

@available(tvOS, deprecated:9.0.1)
@available(iOS, deprecated:9.1)
@available(macOS, unavailable, message: "Unavailable on macOS")
func myFunc() {
    // ...
}

Plus de détails dans le documentation Swift .

244
Axel Guilmin

À partir de Swift et Swift 4, le numéro de version est facultatif. Vous pouvez maintenant simplement taper:

@available(*, deprecated)
func foo() {
    // ...
}

Ou si vous voulez un message, accompagnez-le:

@available(*, deprecated, message: "no longer available ...")
func foo() {
    // ...
}
64
Yuchen Zhong

Vous pouvez l’utiliser pour corriger automatiquement vos entrées avec votre nouvelle fonction.

@available(*, deprecated, renamed: "myNewFunc")
func myOldFunc() {
   // ...
}

func myNewFunc() {
   // ...
}

Au lieu de *, vous pouvez utiliser Swift, pour le Swift numéro de version.

Les fonctions obsolètes génèrent des avertissements mais peuvent toujours être appelées. (Attention)

Des fonctions obsolètes l'empêchent d'être appelé entièrement. (Erreur)

@available(Swift, deprecated: 4.0, obsoleted: 4.2, message: "This will be removed in v4.2, please migrate to ...")

ou utilisez d'autres options comme iOS, macOS, watchOS, tvOS ...

3
Skyborg
@available(iOS, deprecated:7.0, obsoleted: <ObsoletedVersion>, renamed: "myFuncNew", message: "Please use new method - myFuncNew()")
func myFuncOld() {
    //
}

Si deployment target est 9.0 et

1.<ObsoletedVersion> == 10.0 - warning

enter image description here

2 .<ObsoletedVersion> == 8.0 - compile error

enter image description here

0
yoAlex5