さっそくですがみなさん、下記のコードの出力はどうなると思いますか?
let textField = UITextField() textField.text = nil print(textField.text)
結果は Optional("")
になります。何故 nil
にならないのか不思議ですよね👀
理由としては、Objective-C
での TextField
の仕様の名残が Swift
でもあるからみたいです。Objective-C
では、テキストに nil
を代入することが可能で、その仕様を Swift
の TextField
のコンストラクタで変更してしまうと、既存の TextField
コードを破壊しかねないため Swift
でも TextField
の値はオプショナル値みたいです。
ちなみに、同様にオプショナルの text
プロパティに nil
を代入すると出力は下記の通り nil
になります。
let label = UILabel() label.text = nil print(label.text) // nil
そして、force unwrap
された text
プロパティに nil
を代入すると出力は UITextField
と同様に Optional("")
になります。
let textView = UITextView() textView.text = "" print(textView.text) // Optional("")
案外このような細かな挙動の違いでバグを作ってしまう可能性もあるので、これを機に気をつけたいですね😅