[英]Why can't I assign value on didSet?
我有两个观点。 在我的第一个视图中,我创建了一些数据并发送到其他视图,让我们命名为view2。 所以我的view1有代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showUserDetail" {
(segue.destinationViewController as! UserDetailTableViewController).detailContact = detailCoversationContact
}
}
在我的详细说明detailCoversationContact
我有关于这一个用户的详细信息,这个细节像数字,尼克等。现在我希望这些数据被放到我的view2中的变量detailContact
这是我的鳕鱼在视图2这个代码是工作:
class UserDetailTableViewController: UITableViewController {
@IBOutlet weak var nickNameLabel: UILabel!
var nickMy: String = ""
var detailContact: AnyObject? {
didSet {
// Update the user interface for the detail item.
if let detail = self.detailContact {
self.nickMy = (detail.valueForKey("nickName") as? String)!
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
nickNameLabel.text = nickMy
}
}
当我发送数据到detailContact
'我检查是didSet如果是,我设置我的nickMy
,这是工作。 但首先是什么? 设置我的var或viewDidLoad?
这是我的代码而不工作,有人可以解释原因吗?
class UserDetailTableViewController: UITableViewController {
@IBOutlet weak var nickNameLabel: UILabel!
var detailContact: AnyObject? {
didSet {
// Update the user interface for the detail item.
if let detail = self.detailContact {
self.title = detail.valueForKey("nickName") as? String
self.nickNameLabel?.text = (detail.valueForKey("nickName") as? String)!
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
好的,这是self.title
和工作,我看到用户的名称,但标题来自tableView。 但是我的nickNameLabel没变? 为什么?
在时间prepareForSegue
的IBOutlet
■找设立了呢。 因此, self.nickNameLabel
仍nil
,并且可选链接使self.nickNameLabel?.text = ...
安全无所事事。
设置IBOutlet
在viewDidLoad()
设置值:
override func viewDidLoad() {
super.viewDidLoad()
self.nickNameLabel?.text = (detail.valueForKey("nickName") as? String)!
}
另外,您也可以触发didSet
通过设置detailContact
在自身viewDidLoad()
你必须欺骗Swift才能做到这一点,因为它认为将detailContact
它自己什么都不做:
override func viewDidLoad() {
super.viewDidLoad()
detailContact = (detailContact) // trigger didSet to set up the label
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.