在我的Objective-C项目中,我经常使用一个全局常量文件来存储像通知名称和NSUserDefaults键这样的东西。它看起来是这样的:

@interface GlobalConstants : NSObject

extern NSString *someNotification;

@end

@implementation GlobalConstants

NSString *someNotification = @"aaaaNotification";

@end

我如何在Swift中做完全相同的事情?


当前回答

正如其他人所提到的,在类之外声明的任何东西都是全局的。

你也可以创建单例对象:

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来处理类的所有值

其他回答

正如其他人所提到的,在类之外声明的任何东西都是全局的。

你也可以创建单例对象:

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"
}

也可以使用无大小写枚举。

优点-它们不能被实例化。

enum API {
    enum Endpoint {
        static let url1 = "url1"
        static let url2 = "url2"
    }
    enum BaseURL {
        static let dev = "dev"
        static let prod = "prod"
    }
}

Constant.swift

import Foundation

let kBaseURL = NSURL(string: "http://www.example.com/")

ViewController.swift

var manager = AFHTTPRequestOperationManager(baseURL: kBaseURL)

根据swift docs,全局变量是在文件作用域中声明的。

全局变量是定义在任何函数、方法、闭包或类型上下文之外的变量

只需创建一个swift文件(例如:constats .swift)并在那里声明你的常量:

// Constants.swift

let SOME_NOTIF = "aaaaNotification"

从项目中的任何地方调用它,而不需要提及struct,enum或类名。

// MyViewController.swift

NotificationCenter.default.post(name: SOME_NOTIF, object: nil)

我认为这对于代码可读性来说更好。