protocol textingprotocol : class {
func didEnterText (text:String)
}
class secondViewController: UIViewController {
weak var delegate:textingprotocol?
@IBOutlet weak var txtField: UITextField?
@IBAction func dismissButton(sender: UIButton) {
delegate!.didEnterText(txtField?.text) // A: doesn't work
delegate!.didEnterText(txtField?.text!) // B: doesn't work
delegate!.didEnterText((txtField?.text)!) // C: works
}
答:我沒有在做可選鏈和行只會工作,如果文本有一個值,如果沒有那麼它會優雅地失敗? 但它給出:當我進行可選鏈接時,爲什麼會出現錯誤?
可選類型'String?'的值不打開;你的意思是使用 '!'要麼 '?'?
B:即使當我給出的編譯器錯誤的上面,還有我解開它,它仍然是不滿意它希望它像C.我的理解與?
我已經解開txtField並與!
我已解開文字,仍然困惑爲什麼它不起作用
爲什麼C工作,但不是B?沒有比C線更清潔的方式嗎? C線看起來很不吸引人。
應該是'@IBOutlet弱VAR txtField:'的UITextField –
@LeoDabus哈!謝謝。但看着「文本」屬性。爲什麼這是可選的?我的意思是爲什麼我Cmmd +單擊它它顯示'@屬性(非原子,只讀)NSString *文本;'它不顯示任何像'文本:字符串?'它是如何從Objective-C翻譯爲可選? – Honey
我不是swift專家,所以我會留下一條評論而不是答案......'didEnterText'需要一個非零值,所以我的理解是,如果'txtField'沒有'.text '聲明的一部分甚至不會被評估,因此添加'.text!'不能解決無文本字段的問題。在選項C中,編譯器看到的所有值都是「保證」爲非零值,因爲整個事物被包裝在parens中... – Mike