Statique de la fonction de variables dans Swift
Je suis à essayer de comprendre comment déclarer une variable statique limitée uniquement localement à une fonction dans Swift.
En C, cela pourrait ressembler à quelque chose comme ceci:
int foo() {
static int timesCalled = 0;
++timesCalled;
return timesCalled;
}
En Objective-C, c'est fondamentalement la même:
- (NSInteger)foo {
static NSInteger timesCalled = 0;
++timesCalled;
return timesCalled;
}
Mais je n'arrive pas à faire quelque chose comme cela dans Swift. J'ai essayé de déclarer la variable dans l'une des manières suivantes:
static var timesCalledA = 0
var static timesCalledB = 0
var timesCalledC: static Int = 0
var timesCalledD: Int static = 0
Mais ces résultats de toutes les erreurs.
- Le premier se plaint "des propriétés Statiques ne peuvent être déclarées sur un type".
- Le second se plaint Attendue "déclaration" (où
static
est) et "rythme" (oùtimesCalledB
est) - Le troisième se plaint "états Consécutifs sur une ligne doivent être séparés par des ';'" (dans l'espace entre le côlon et le
static
) et "Type Attendu" (oùstatic
est) - Le quatrième se plaint "états Consécutifs sur une ligne doivent être séparés par des ';'" (dans l'espace entre
Int
etstatic
) et Attendue "déclaration" (sous le signe égal)
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que Swift prend en charge statique de la variable sans l'avoir attaché à un class/struct. Essayez de déclarer un privé struct avec des variables statiques.
struct Holder {…}
à l'intérieur de multiples fonctions et qu'ils n'entrent en collision. Swift pourrait soutenirstatic let
sans cettestruct
passe-partout autour.Une autre solution
Swift 1.2 avec Xcode 6.3 prend désormais en charge statique comme prévu. À partir de Xcode 6.3, la version bêta de notes:
Il semble que les fonctions ne peuvent pas contenir statique déclarations (comme demandé dans la question). Au lieu de cela, la déclaration doit être faite au niveau de la classe.
Exemple Simple montrant une propriété statique de la incrémenté à l'intérieur d'une classe (aka statique) de la fonction, mais une fonction de classe n'est pas nécessaire:
De sortie:
static
peut être intentionnelle de la part d'Apple, si l'on est toujours les bienvenus pour soumettre un rapport de bogue pour demander un changement. En C,static
limites stockage d'une variable à la source de la portée du fichier (qui n'est pas toujours la même que la portée de classe), tandis que le placement de la déclaration de la variable détermine le lexicale portée (global vs au sein de la fonction vs beaucoup imbriquée-{}
s). En Swift, de stockage étendue suit toujours portée lexicale, de sorte que vous ne pouvez pas avoir une variable lexicale à une fonction et qui a mondiale de stockage.Une autre solution