我需要将一个变量从AppDelegate传递给另一个我创建的类来保存项目的全局变量,我无法找到使其工作的方法。
这是AppDelegate中的代码:
func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) {
println("Device's token is: \(deviceToken)")
//Global Variables Class Instance
let globals:Globals = Globals()
globals.setDeviceToken("test1") //method1 not working
globals.deviceToken = "test2" //method2 not working
}
这是我的Globals类:
public class Globals {
var deviceToken = String()
init() {
//nothing
}
func setDeviceToken(s:String){
deviceToken = s
}
func getDeviceToken() -> String {
return deviceToken
}
}
如果我尝试从项目的其他文件打印值,我将无法获得任何内容,只是一个空字符串。
class ViewController: UIViewController {
//Global Variables Class Instance
let globals:Globals = Globals()
override func viewDidLoad() {
println(globals.getDeviceToken()) //return empty string
println(globals.deviceToken) //return empty string
您可以使用几种模式来实现您想要的效果
let delegate = UIApplication.sharedApplication().delegate as AppDelegate
let deviceToken = delegate.deviceToken
class SingletonB {
class var sharedInstance : SingletonB {
struct Static {
static let instance : SingletonB = SingletonB()
}
return Static.instance
}
}
然后使用sharedInstance
在任何地方实例化单例并访问相同的变量。
第一个是快速和肮脏的,所以对于更严肃的项目,我会推荐单例模式。
可能有一百万种方法可以做到这一点,但这应该让你开始
(更多在此链接,探讨了实现单例的几种方法:https://github.com/hpique/SwiftSingleton)
我只是使用NSUserDefaults解决了我的问题
在AppDelegate中:
NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "deviceToken")
NSUserDefaults.standardUserDefaults().synchronize()
来自其他课程:
NSUserDefaults.standardUserDefaults().objectForKey("deviceToken")
老实说,我不知道这是否是一个很好的方法,但它是有效的