【发布时间】:2017-04-27 20:44:46
【问题描述】:
我正在尝试更新我的第一个视图控制器上的标签,然后从第二个展开。 Dfri 在这里Passing data with unwind segue 发布了一个有用的答案,但我仍然无法使我的代码工作。
我知道在展开后不会再次调用 viewDidLoad,但是我不明白在发回数据后视图是如何更新的。
在 Dfri 的回答中,他的第一个视图控制器包含此代码,但我不知道“newValue”是什么。除非我忽略了某些东西,否则他似乎没有在其他任何地方定义它。
var dataRecieved: String? {
willSet {
labelOne.text = newValue
}
}
@IBOutlet weak var labelOne: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
labelOne.text = "Default passed data"
}
@IBAction func unwindToThisView(sender: UIStoryboardSegue) {
if let sourceViewController = sender.sourceViewController as? ViewControllerB {
dataRecieved = sourceViewController.dataPassed
}
}
我假设他使用带有“willSet”关键字的 dataRecieved 变量作为新数据到达后更新视图的一种方式。但同样,我不知道“newValue”是什么或它是如何工作的。
编辑
这是我的代码,但是当我从展开返回时,我意外地在“playerName.text = newValue”上发现 nil。插座连接良好,并使用初始的“未选择玩家”默认值。
class NBARotoHome: UIViewController{
@IBOutlet weak var playerName: UILabel!
var dataRecieved: String? {
willSet {
playerName.text = newValue
}
}
override func viewDidLoad() {
super.viewDidLoad()
playerName.text = "No Player Selected"
}
@IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
if let sourceViewController = segue.source as? BuyStats {
dataRecieved = sourceViewController.selectedPlayer.Name
}
}
}
【问题讨论】:
-
newValue 在 Swift 的计算属性中定义
-
我在 playerName.text = newValue 上意外发现 nil。我将编辑我的问题以显示我自己的代码。
-
更改为
didSet和newValue为dataRecieved
标签: ios swift segue uistoryboardsegue unwind-segue