![](/img/trans.png)
[英]Error when passing deviceToken from AppDelegate to another class in swift
[英]Swift Passing data from appDelegate to another class
我需要將一個變量從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
您可以使用幾種模式來實現您想要的效果
您可以通過UIApplication訪問AppDelegate:
let delegate = UIApplication.sharedApplication().delegate as AppDelegate let deviceToken = delegate.deviceToken
看看單身人士。 快速谷歌搜索'Swift singleton'將為您帶來很長的路要走。 第一個結果:
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")
老實說,我不知道這是否是一個很好的方法,但它是有效的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.