繁体   English   中英

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

[英]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没变? 为什么?

在时间prepareForSegueIBOutlet ■找设立了呢。 因此, self.nickNameLabelnil ,并且可选链接使self.nickNameLabel?.text = ...安全无所事事。

设置IBOutletviewDidLoad()设置值:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM