iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】UITextField の text プロパティはなぜオプショナルなのか?

さっそくですがみなさん、下記のコードの出力はどうなると思いますか?

let textField = UITextField()
textField.text = nil

print(textField.text)

結果は Optional("") になります。何故 nil にならないのか不思議ですよね👀 理由としては、Objective-C での TextField の仕様の名残が Swift でもあるからみたいです。Objective-C では、テキストに nil を代入することが可能で、その仕様を SwiftTextField のコンストラクタで変更してしまうと、既存の TextField コードを破壊しかねないため Swift でも TextField の値はオプショナル値みたいです。

stackoverflow.com

ちなみに、同様にオプショナルの 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("")

案外このような細かな挙動の違いでバグを作ってしまう可能性もあるので、これを機に気をつけたいですね😅

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com