传递的 Segue 变量在加载后保持清除

Passed Segue variable keeps clearing after load

所以我一直在努力学习 swift,我遇到了让我卡住了一段时间的问题。我正在使用序列将数据从第一个控制器传递到第二个控制器。

当我打印变量 onLoad 时,它会打印出传递的正确值,但是在我执行另一个函数(单击红色按钮)后,它不会打印出传递的值,而是打印出空白值。

var Level = 0;
var userId: String = "";
var clanId: String = "";
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    print(userId); //prints 97
    print(clanId); //prins 2
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
@IBAction func redButtonClick(sender: AnyObject) {
     print(userId); //prints ""
    print(clanId); //prins ""
}

正如您在代码中看到的那样,它似乎非常简单,但显然我不知道它是如何工作的,因为在加载之后变量中没有任何内容。

感谢大家的帮助!

----------------编辑---------------------

更改了值 userId:String = "test" 更改了值 clanId:String = "test"

它现在在 onload 函数中打印出来

 print(userId)
 print(clanId)

 results:
 97
 2
 test
 test

----------------添加------------

@IBAction func loginButton(sender: AnyObject) {
  self.performSegueWithIdentifier("dashboard", sender: self);
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if(segue.identifier == "dashboard")
        {
            let dutydash:dashboardController  = segue.destinationViewController as! dashboardController;
            dutydash.userId = self.userId;
           dutydash.clanId = self.clanId;
        }
}

一对建议:

  • userIdclanId 的初始设置更改为其他设置而不是 "",例如 "test" 以查看是否存在问题
  • 在Swift中,不需要在每行的末尾添加;
  • 所有变量都应该是驼峰式大小写(以小写字母开头),因此将 Level 更改为 level

下面是一个工作示例,确保您的数据设置在 prepareForSegue

class prevClass: UIViewController{

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "nextView" {
            let destinationVC = segue.destinationViewController as! NextView
            destinationVC.userId = "77789";
            destinationVC.clanId = "Awesome Clan"

        }
    }
    @IBAction func next(sender: AnyObject) {
        self.performSegueWithIdentifier("nextView", sender: self)

    }
}

class NextView: UIViewController {

    var userId: String!
    var clanId: String!

    override func viewDidLoad() {
    }

    @IBAction func redButtonClick(sender: AnyObject) {
        print(userId);
        print(clanId);
    }
}

我唯一能想到的是,您可能同时 运行 视图控制器的两个或多个实例。在 viewdidload 和按钮操作中打印 "self" 并检查两者是否相等。