通过Segue变量在加载后保持清除

时间:2016-02-27 20:10:43

标签: ios iphone swift ios7

所以我一直在努力学习swift,而且我遇到了问题让我陷入了一段时间。我使用seques将数据从第一个控制器传递到第二个控制器。

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

  button.layer.borderColor = UIColor.orangeColor().CGColor

正如你在代码中看到的那样,它似乎很简单,但显然我错过了它的工作方式,因为在onload之后变量中没有包含任何内容。

感谢大家的帮助!

------------------ EDIT ----------------------

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

现在打印出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 ""
}

---------------- ADDITION -----------

 print(userId)
 print(clanId)

 results:
 97
 2
 test
 test

3 个答案:

答案 0 :(得分:2)

以下是一个工作示例,确保您的数据设置在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);
    }
}

答案 1 :(得分:1)

夫妻建议:

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

答案 2 :(得分:1)

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