2015-04-02 130 views
1

我正在做一個警報,有幾個文本字段,這將保存在服務器上,一旦保存命中。我設法讓它發揮作用,但發現一些我不明白的奇怪東西。我不確定如何用文字解釋它,所以我會發布有問題的代碼。現在UIAlertController addTextFieldWithConfigurationHandler。奇怪的功能

var enteredName: UITextField! 

let myAlert: UIAlertController = UIAlertController(title: "", message: nil, preferredStyle: .Alert) 
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in 
    println(self.enteredName.text) 
} 
myAlert.addAction(saveAction) 
myAlert.addTextFieldWithConfigurationHandler { textField -> Void in 
    textField.placeholder = "Name" 
    self.enteredName = textField 
} 
self.presentViewController(myAlert, animated: true, completion: nil) 

,上面的代碼工作,我也沒有與它的問題,但是,我有一個非常相似的代碼塊原本沒有工作。上面的代碼片段將顯示一個帶有文本字段的提醒,輸入內容並點擊保存後會打印您輸入的內容。下面的代碼應該這樣做,但打印空行,我假設空字符串。

var enteredName: String! 

let myAlert: UIAlertController = UIAlertController(title: "", message: nil, preferredStyle: .Alert) 
let saveAction: UIAlertAction = UIAlertAction(title: "Save", style: .Default) { action -> Void in 
    println(self.enteredName) 
} 
myAlert.addAction(saveAction) 
myAlert.addTextFieldWithConfigurationHandler { textField -> Void in 
    textField.placeholder = "Name" 
    self.enteredName = textField.text 
} 
self.presentViewController(myAlert, animated: true, completion: nil) 

正如你所看到的,沒有太多改變,對我來說,兩個代碼塊看起來應該運行。差異:在代碼片段沒有工作

  1. 變量是一個字符串,而不是爲UITextField
  2. 變量被保存到的TextField.text而不是文本框
  3. 警報被打印的自我。而不是self.enteredName.text

所以我的問題是這樣的,爲什麼底部的文本塊不能正常工作而頂部塊呢?

+0

雖然我知道這不是必需的,但我會很感激你爲什麼投票的意見,所以我可以編輯它以更好地符合,或理解我做錯了什麼,所以我的下一個問題將更多關於主題。 – TaylorAllred 2015-04-02 22:23:32

回答

1

addTextFieldConfigurationHandler方法在用戶有機會鍵入任何內容並按下保存之前被調用(因此,在您執行saveAction的代碼被執行之前)。

在底部的例子中,你永遠分配什麼你enteredName字符串的唯一情況是,當你添加文本字段配置處理器。在用戶看到文本字段後,任何時候都不會調用文本字段配置處理程序(所以用戶沒有機會鍵入文本字段之後)。

而且字符串變量不能從文本字段中奇蹟般地獲得值。

+0

這很有道理,但那麼頂級示例如何工作? enteredName變量如何獲取_its_數據以供稍後使用? – TaylorAllred 2015-04-02 22:26:43

+0

頂部示例使'self.enteredName'指向與'textField'相同的對象。 'UITextField'是一個引用類型。所以當'.text'屬性改變時,兩個變量都會看到它。所有的變量只是一個指向存儲位置的指針,在那裏有一個'UITextField',並且你讓它們都指向相同的內存位置。 – nhgrif 2015-04-02 22:29:29

+0

好的,這是有道理的,謝謝你爲我解釋它。 – TaylorAllred 2015-04-02 22:56:01