将变量从一个Swift类传递到另一个Swift类的最佳方法?

时间:2015-04-20 01:31:21

标签: ios swift nsuserdefaults

假设我在一个类ViewController中定义变量,并希望从另一个类中访问该变量,比如BLEHandler。我该怎么做呢?我遇到了NSUserDefaults的问题,所以除此之外的方法将非常感激。

3 个答案:

答案 0 :(得分:6)

有些方法可以在viewControllers之间传递值 例如

  • PrepareForSegue
  • NSNotificationCenter
  • 代表
  • 的Singleton

在不同的情况下使用不同的方式。

如果你使用prepareFoSegue - 当你想在执行segue时传递时使用

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        //Use below to get reference,so that you can pass value
        //segue.destinationViewController 
        //segue.sourceViewController
}

如果你使用notificationcenter - 盲目通知,一个vc发送消息,可能不止一个接收。 在发送消息vc

    NSNotificationCenter.defaultCenter().postNotificationName(, object: )

在接收消息vc中 先注册

    NSNotificationCenter.defaultCenter().addObserver(, selector: , name: , object: )

比从选择器

获取值

不要忘记删除

    NSNotificationCenter.defaultCenter().removeObserver(, name: , object:  )

如果您使用委托 - 接收者和发件人首先拥有连接。 有可能发布这个,我不会发布示例。

如果你使用单身 - 你必须清楚单身的生命周期。我不建议以这种方式传递价值。

答案 1 :(得分:3)

别担心

var firstmyvar = "Any"

let secondview = self.storyboard?.instantiateViewControllerWithIdentifier("secondview") as SecondViewController

secondview.myvar = firstmyvar

self.presentViewController(secondview, animated: false, completion: nil)

答案 2 :(得分:-4)

一种方法是在app delegate中创建变量。它的全局视图控制器。

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable