Swift将数据从appDelegate传递到另一个类
问题描述:
我需要将一个变量从AppDelegate传递到另一个类,这是我创建的用于保存项目的全局变量的类,我无法找到使其工作的方法。Swift将数据从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
*** UPDATE: 对于那些谁否决了我的问题:非常感谢你。对不起,如果我不是Swift专家(尚未),并抱歉,如果我使用stackoverflow来问我不知道的东西!
答
有几种模式可以用来实现你想要
-
你可以通过UIApplication的访问的AppDelegate:
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")
老实说,我不知道这是做一个很好的方式,但它的工作
***更新:对于那些谁否决了我的问题:非常感谢你。对不起,如果我不是Swift专家(尚未),并抱歉,如果我使用stackoverflow来问我不知道的东西!
应用程序委托中应该保存多少数据?没有! EVER!不要这样做。这不是应用程序代表的用途。 – Fogmeister 2014-11-03 14:38:42
有没有必要生气,我只是一个初学者,我正在努力学习。 @Fogmeister – MeV 2014-11-06 11:05:03