Je commence mon projet avec un contrôleur de vue fractionnée comme contrôleur de vue initial et le démarre automatiquement à partir du storyboard.
En règle générale, une application avec cette interface utilisateur a un et un seul contrôleur de vue fractionnée en tant que racine, donc je crée une variable statique dans la sous-classe et la définit lorsque l'initialisation a été effectuée.
Je veux donc essayer ce comportement avec rapidité.
J'ai lu le guide du langage de programmation Swift sur iBook à propos des propriétés de type (avec mot-clé statique et de classe) et j'ai essayé un morceau de code pour le travail:
import UIKit
class SplitViewController: UISplitViewController {
class func sharedInstance() -> SplitViewController {
return SplitViewController.instance
}
class let instance: SplitViewController = nil
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
self.initialization()
}
init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder);
self.initialization()
}
func initialization() {
SplitViewController.instance = self;
}
}
mais j'ai compris quand Xcode a dit que le mot-clé de classe pour les propriétés de type n'était pas encore pris en charge.
Aviez-vous une solution pour cela?
Réponses:
Swift prend désormais en charge les variables statiques dans les classes. Ce n'est pas exactement la même chose qu'une variable de classe (car elles ne sont pas héritées par des sous-classes), mais cela vous rapproche assez:
la source
class
mot - clé ne peut être utilisé que pour les propriétés calculées maintenant et les statiques sont pour toutes les propriétés de type or struct)L'incorporation d'une structure peut très bien fonctionner comme solution de contournement:
La propriété de type calculé SomeClass.workaroundClassVariable peut ensuite être utilisée comme s'il s'agissait d'une propriété de type stocké.
la source
Il semble possible de déclarer des variables avec une durée de stockage statique dans la portée du fichier (comme en C):
la source
private
.Ma méthode préférée consiste simplement à utiliser une variable de portée de fichier privé en dehors de la classe, puis à implémenter des getters et des setters de classe / statique:
la source
Depuis Swift 1.2 (disponible avec Xcode 6.3b1 et les versions ultérieures),
static
les propriétés de classe et les méthodes sont prises en charge.la source
class
variable, ou y a-t-il une distinction (utiliséestatic
pour les structures,class
pour les classes)?static
est un alias pourclass final
.Utilisation d'un modèle singleton dispatch_once dans Swift
Semble être la meilleure réponse à ce jour, en évitant l'utilisation d'une variable globale.
la source
Une solution assez similaire à var dans la portée du fichier mais plus personnalisable et proche du singleton consiste à utiliser une structure qui prend en charge var statique comme propriété de classe
la source
Ok, avec la solution de Nikolai qui fait le travail. Je poste mes modifications dans ce fil pour information
et par exemple, dans mon appDelegate, je peux accéder à cette méthode statique comme celle-ci
la source
Le libellé de l'erreur implique fortement que ce sera une caractéristique du langage à l'avenir.
Vous souhaiterez peut-être recourir temporairement à la déclaration d'une variable de propriété dans le délégué d'application et à la récupérer à partir de là. Pas idéal, certainement un anti-modèle, mais vous donnerait un endroit central pour récupérer le
UISplitViewController
si nécessaire.la source
Vous devez envelopper les variables de classe dans une variable struct interne
la source
Essaye ça:
la source
Il s'appelle Propriété de type dans Swift.
En savoir plus sur le lien ci-dessous,
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254
la source