Dans mes projets Objective-C, j'utilise souvent un fichier de constantes globales pour stocker des éléments comme les noms et les clés de notification NSUserDefaults
. Cela ressemble à ceci:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
Comment faire exactement la même chose dans Swift?
ios
objective-c
swift
user1028028
la source
la source
Réponses:
Structures comme espace de noms
IMO la meilleure façon de traiter ce type de constantes est de créer un Struct.
Ensuite, par exemple, appelez-le comme ceci dans votre code:
Imbrication
Si vous voulez une meilleure organisation, je vous conseille d'utiliser des sous-structures segmentées
Ensuite, vous pouvez simplement utiliser par exemple
K.Path.Tmp
Exemple du monde réel
Ceci est juste une solution technique, l'implémentation réelle dans mon code ressemble plus à:
et
la source
Constant.swift
fichier avec des structures séparées mais non encapsulées dans une grandeConstants
structure pour éviter un appel trop long à une constante. Donc j'appelleNotificationKey.Welcome
au lieu deConstants.NotificationKey.Welcome
Constants.swift
) et se ressemblent toujours: en commençant par des majuscules et avec un nom de catégorie significatif comme "NotificationKey", "SegueIdentifier" ou "Path", .. Donc je peux voir facilement quand c'est une constante;)struct Helpers { static func RGBCOLOR(red: Int, green: Int, blue: Int) -> UIColor { return UIColor(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1) } static func IOS7VERSION() -> Bool { return UIDevice.currentDevice().systemVersion.compare("7.0", options: .NumericSearch, range: nil, locale: nil) != .OrderedAscending } }
Je suis un peu en retard à la fête.
Peu importe comment je gère le fichier de constantes pour qu'il soit plus logique pour les développeurs lors de l'écriture de code en swift.
POUR URL:
Pour les CUSTOMFONTS:
POUR TOUTES LES CLÉS UTILISÉES DANS L'APPLICATION
POUR LES COULEURS CONSTANTES:
Vous pouvez envelopper tous ces fichiers dans un groupe commun nommé Constantes dans votre projet Xcode.
Et pour en savoir plus, regardez cette vidéo
la source
Bien que je préfère la méthode de @ Francescu (en utilisant une structure avec des propriétés statiques), vous pouvez également définir des constantes et des variables globales:
Notez cependant que contrairement aux variables / constantes locales et aux propriétés de classe / struct, les globaux sont implicitement paresseux, ce qui signifie qu'ils sont initialisés lorsqu'ils sont accédés pour la première fois.
Lecture suggérée: les variables globales et locales , ainsi que les variables globales dans Swift ne sont pas des variables
la source
Constant.swift
ViewController.swift
la source
Considérez les énumérations. Ceux-ci peuvent être logiquement décomposés pour des cas d'utilisation distincts.
Un avantage unique se produit lorsque vous avez une situation d'options mutuellement exclusives, telles que:
Dans cet exemple, vous recevrez une erreur de compilation car vous n'avez pas traité le cas de
PhotoMetaKeys.DateTaken
.la source
Ou tout simplement dans GlobalConstants.swift:
la source
Comme d'autres l'ont mentionné, tout ce qui est déclaré en dehors d'une classe est global.
Vous pouvez également créer des singletons:
Chaque fois que vous voulez utiliser quelque chose de cette classe, vous écrivez par exemple:
Si vous écrivez maintenant
println(TestClass.sharedInstance.number)
de n'importe où dans votre projet, vous imprimerez1
dans le journal. Cela fonctionne pour toutes sortes d'objets.tl; dr: à chaque fois que vous souhaitez rendre tout dans une classe global, ajouter
static let sharedInstance = YourClassName()
à la classe et adresser toutes les valeurs de la classe avec le préfixeYourClassName.sharedInstance
la source
Ce que j'ai fait dans mon projet Swift
1: créer un nouveau fichier Swift
2: y créer une structure et une constante statique.
3: Pour utiliser, utilisez simplement YourStructName.baseURL
Remarque: Après la création de l'initialisation prend peu de temps, elle s'affichera dans les autres viewcontrollers après 2 à 5 secondes.
la source
Pour les notifications, vous pouvez utiliser l'extension, quelque chose comme ceci:
Et utilisez-le comme
NotificationCenter.default.post(name: .testNotification, object: nil)
la source
Pour avoir des constantes globales dans mes applications, voici ce que je fais dans un fichier Swift séparé :
Il est facile à utiliser et à appeler partout comme ceci:
la source
Couleurs
Les polices
Pour les autres - tout est identique à la réponse acceptée.
la source
Selon les documents globaux, les variables globales sont déclarées dans la portée du fichier.
Créez simplement un fichier rapide (par exemple: Constnats.swift) et déclarez-y vos constantes:
et appelez-le depuis n'importe où dans votre projet sans avoir besoin de mentionner struct, enum ou nom de classe.
Je pense que c'est beaucoup mieux pour la lisibilité du code.
la source
Version Swift 4
Si vous souhaitez créer un nom pour NotificationCenter:
Abonnez-vous aux notifications:
Envoyer une notification:
Si vous souhaitez simplement utiliser une classe avec des variables:
Ou:
la source
Des énumérations sans boîtier peuvent également être utilisées.
Avantage - Ils ne peuvent pas être instanciés.
la source
Apprendre d'Apple est le meilleur moyen.
Par exemple, la notification du clavier d'Apple:
Maintenant, j'apprends d'Apple:
Quoi de plus,
NSAttributedString.Key.foregroundColor
,:Maintenant, j'apprends d'Apple:
usage:
Apprendre d'Apple est la façon dont tout le monde peut le faire et peut facilement promouvoir la qualité de votre code.
la source