在我的Objective-C项目中,我经常使用一个全局常量文件来存储像通知名称和NSUserDefaults键这样的东西。它看起来是这样的:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
我如何在Swift中做完全相同的事情?
根据swift docs,全局变量是在文件作用域中声明的。
全局变量是定义在任何函数、方法、闭包或类型上下文之外的变量
只需创建一个swift文件(例如:constats .swift)并在那里声明你的常量:
// Constants.swift
let SOME_NOTIF = "aaaaNotification"
从项目中的任何地方调用它,而不需要提及struct,enum或类名。
// MyViewController.swift
NotificationCenter.default.post(name: SOME_NOTIF, object: nil)
我认为这对于代码可读性来说更好。
正如其他人所提到的,在类之外声明的任何东西都是全局的。
你也可以创建单例对象:
class TestClass {
static let sharedInstance = TestClass()
// Anything else goes here
var number = 0
}
当你想要使用这个类中的一些东西时,你可以这样写:
TestClass.sharedInstance.number = 1
如果您现在从项目的任何地方写入println(TestClass.sharedInstance.number),您将向日志中输出1。这适用于所有类型的对象。
tl;dr:任何时候你想让一个类中的所有东西都是全局的,在类中添加静态let sharedInstance = YourClassName(),并用前缀YourClassName.sharedInstance来处理类的所有值