[英]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.