在我的Objective-C项目中,我经常使用一个全局常量文件来存储像通知名称和NSUserDefaults键这样的东西。它看起来是这样的:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
我如何在Swift中做完全相同的事情?
向苹果学习是最好的方法。
例如,苹果的键盘通知:
extension UIResponder {
public class let keyboardWillShowNotification: NSNotification.Name
public class let keyboardDidShowNotification: NSNotification.Name
public class let keyboardWillHideNotification: NSNotification.Name
public class let keyboardDidHideNotification: NSNotification.Name
}
现在我向苹果学习:
extension User {
/// user did login notification
static let userDidLogInNotification = Notification.Name(rawValue: "User.userDidLogInNotification")
}
更重要的是,NSAttributedString.Key.foregroundColor:
extension NSAttributedString {
public struct Key : Hashable, Equatable, RawRepresentable {
public init(_ rawValue: String)
public init(rawValue: String)
}
}
extension NSAttributedString.Key {
/************************ Attributes ************************/
@available(iOS 6.0, *)
public static let foregroundColor: NSAttributedString.Key // UIColor, default blackColor
}
现在我向苹果学习:
extension UIFont {
struct Name {
}
}
extension UIFont.Name {
static let SFProText_Heavy = "SFProText-Heavy"
static let SFProText_LightItalic = "SFProText-LightItalic"
static let SFProText_HeavyItalic = "SFProText-HeavyItalic"
}
用法:
let font = UIFont.init(name: UIFont.Name.SFProText_Heavy, size: 20)
向苹果学习是每个人都可以做的事情,可以很容易地提高你的代码质量。
正如其他人所提到的,在类之外声明的任何东西都是全局的。
你也可以创建单例对象:
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来处理类的所有值
Swift 4版本
如果您想为NotificationCenter创建一个名称:
extension Notification.Name {
static let updateDataList1 = Notification.Name("updateDataList1")
}
订阅通知:
NotificationCenter.default.addObserver(self, selector: #selector(youFunction), name: .updateDataList1, object: nil)
发送通知:
NotificationCenter.default.post(name: .updateDataList1, object: nil)
如果你只是想要一个有变量的类:
class Keys {
static let key1 = "YOU_KEY"
static let key2 = "YOU_KEY"
}
Or:
struct Keys {
static let key1 = "YOU_KEY"
static let key2 = "YOU_KEY"
}