gpt4 book ai didi

swift - 为什么我不能在 didSet 上赋值?

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:43 25 4
gpt4 key购买 nike

我有两种看法。在我的第一个 View 中,我创建了一些数据并发送到其他 View ,让我们命名为 view2。所以我的 view1 有代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showUserDetail" {
(segue.destinationViewController as! UserDetailTableViewController).detailContact = detailCoversationContact
}
}

在我的 detailCoversationContact 中,我有关于这个用户的详细信息,这个详细信息如号码、昵称等。现在正如我所期望的那样,这些数据被放入我的 View 中的变量 detailContact2

这是我在 view2 中的鳕鱼这段代码是有效的:

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。但是我的昵称标签没有变?为什么?

最佳答案

prepareForSegue 时,IBOutlet 尚未设置。因此,self.nickNameLabel 仍然是 nil可选链接 使得 self.nickNameLabel?.text = ... 安全地什么都不做。

设置 IBOutlet 后,在 viewDidLoad() 中设置值:

override func viewDidLoad() {
super.viewDidLoad()
self.nickNameLabel?.text = (detail.valueForKey("nickName") as? String)!
}

或者,您可以通过在 viewDidLoad() 中将 detailContact 设置为其自身来触发 didSet。你必须欺骗 Swift 才能做到这一点,因为它认为将 detailContact 分配给自己什么都不做:

override func viewDidLoad() {
super.viewDidLoad()
detailContact = (detailContact) // trigger didSet to set up the label
}

关于swift - 为什么我不能在 didSet 上赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32550728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com