在我的Objective-C项目中,我经常使用一个全局常量文件来存储像通知名称和NSUserDefaults键这样的东西。它看起来是这样的:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
我如何在Swift中做完全相同的事情?
颜色
extension UIColor {
static var greenLaPalma: UIColor {
return UIColor(red:0.28, green:0.56, blue:0.22, alpha:1.00)
}
}
字体
enum CustomFontType: String {
case avenirNextRegular = "AvenirNext-Regular",
avenirDemiBold = "AvenirNext-DemiBold"
}
extension UIFont {
static func getFont(with type: CustomFontType, size: CGFloat) -> UIFont {
let font = UIFont(name: type.rawValue, size: size)!
return font
}
}
对于其他-一切都与接受的答案相同。
根据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来处理类的所有值