簡體   English   中英

Swift將數據從appDelegate傳遞到另一個類

[英]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

您可以使用幾種模式來實現您想要的效果

  1. 您可以通過UIApplication訪問AppDelegate:

     let delegate = UIApplication.sharedApplication().delegate as AppDelegate let deviceToken = delegate.deviceToken 
  2. 看看單身人士。 快速谷歌搜索'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM