所以我一直在努力学习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
答案 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)
夫妻建议:
userId
和clanId
的初始设置更改为其他内容,而不是""
,例如"test"
以查看是否存在问题;
Level
更改为level
答案 2 :(得分:1)
我唯一能想到的是你可能同时运行两个或更多个视图控制器实例。在viewdidload和按钮操作内打印“self”,检查两者是否相等。