Définir une variable statique dans Swift
Je veux définir une variable statique de tenir un objet NSDate dans Swift 2.2. J'ai essayé ce qui suit:
static var interval:NSDate
var static interval:NSDate
var interval:static NSDate
Aucune travaillent. J'ai écrit la même chose en Objective-C à la normale:
static NSString* str
Mais n'est tout simplement pas de travail en Swift.
Laissez-moi être plus clair, je veux utiliser un intervalle statique dans le didUpdateLocation méthode pour locationManager ainsi qu'une fonction peut uniquement se produire au bout de cinq minutes, mais l'emplacement de l'utilisateur va encore être vu en temps réel. C'est la façon dont je l'ai fait en Objective-C
-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
static NSDate *previous; //<--- This in Swift
static int run = 0;
CLLocation *location = locations.lastObject;
if (run == 0 || [location.timestamp timeIntervalSinceDate:previous] > 10)
{
[_dbObj insert: location.coordinate.latitude : location.coordinate.longitude : [NSDate date] : location.timestamp];
previous = location.timestamp;
run++;
}
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(location.coordinate, 2*1609.34, 2*1609.34);
[[self mapView] setRegion:viewRegion animated:YES];
}
De ce que je comprends, j'aurais besoin de créer une classe tat contient cette statique NSDate variable et de l'instancier dans le didUpdateLocations méthode. Oui?
Merci!
static
propriété au sein d'une classe à l'aide de la première syntaxe. Mais où êtes-vous essayer de faire ça? L'Objective-C static
mot-clé peut être utilisé à différentes portées (un global, pour le rendre accessible uniquement à cette unité de compilation; une variable locale dans une méthode de la mise en œuvre) qui ne sont pas autorisés à Swift. Vous avez à nous montrer où vous essayez de faire cela pour nous de faire d'autres commentaires.Double Possible de les propriétés Statiques Swift
Qui sont fonction de la portée statique vars, et ma suggestion devrait fonctionner. – Mais pourquoi ne pas vous rendre les variables d'instance de la classe englobante à la place?
OriginalL'auteur Nick D. | 2016-07-02
Vous devez vous connecter pour publier un commentaire.
En C,
à la niveau du fichier définit une variable
name
dont la portée est limitée àla même unité de compilation (grosso modo: pour le même fichier source),
et la même chose s'applique à votre code Objective-C
Dans Swift, vous obtenir le même effet avec un
private
propriétédéfini sur le niveau du fichier:
date
est visible que dans le même fichier source,comparer Contrôle D'Accès
dans la Swift blog.
Fonction de l'étendue variables statiques sont possibles dans Swift ainsi,
mais vous devez les mettre à l'intérieur d'une structure. Exemple:
C'est pourquoi j'ai explicitement dit "statique sur le niveau du fichier". Je n'ai pas la mention "statique sur l'étendue de classe" (ni la question, autant que je puis dire). "À la portée de fichier est similaire à l'privés" – c'est exactement ce que j'ai essayé d'expliquer.
Je suppose que mon point est en accord avec @rob, il n'y a pas suffisamment d'informations pour répondre à la question parce qu'ils ne disent rien au sujet de la portée. Mon hypothèse était/est en fait qui ils demandent au sujet de la fonction étendue...
Il semble que vous avez raison avec votre hypothèse, la question est à propos de la fonction d'étendue variables statiques. J'ai mis à jour la réponse en conséquence.
OriginalL'auteur Martin R
Il y a deux problèmes ici:
static
ouclass
membres sont autorisés qu'à l'intérieur d'unclass
, etstatic
membres ont besoin d'être initialisé (ou être déclaré en option être initialisée avecnil
).Exemple:
Noter que la première restriction n'est pas présent en Objective-C: vous êtes autorisé à avoir la libre-debout statique des variables, en plus de la fonction de l'étendue de variables statiques.
OriginalL'auteur dasblinkenlight