簡體   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