Help us understand the problem. What is going on with this article?

[Tips] UILabel, UITextField, UITextViewのちょっとした挙動の違い

More than 5 years have passed since last update.

UILabelとUITextFieldとUITextViewのtextプロパティの持ち方がそれぞれ想像していたものと違かったのでTipsとしてまとめます。

普段UILabelを使っているとtextプロパティはOptional型ですし、nilが入るものと当然のように思っていました。
しかしUITextFieldとUITextViewは若干挙動が異なっていたのでまとめます。

実行環境はXcode7.1.1のPlaygroundでやりました。

UILabel

let label = UILabel()
label.text

結果:nil

UILabelのtextプロパティはString?なのでnilが入ります。

UITextField

let textField = UITextField()
textField.text

結果:""

UITextFieldのtextプロパティもUILabel同様String?なのでnilが入るのかと思っていたら取得する際には内部的に勝手に空文字が入る仕様のようです。
念のためtextを表示する直前にtextField.text = nilとしても同じ結果でした。

UITextView

let textView = UITextView()
textView.text

結果:""

じゃあUITextViewはどうだろう?と見てみると、これのtextプロパティはString!でした。
そもそもnilが入らない挙動のようです。

まとめ

UITextFieldのtextプロパティを取得するときには空文字が入るというところが今回のミソかと思います。
if textField == nil {}textField.isEmptyなどの条件を使うときに注意が必要かもしれません。:)

ktanaka117
百合好きのダンボールの人です。 SwiftでiOSアプリを開発していて、最近のホットトピックはテスト、設計、リファクタリング。 Twitter: @ktanaka117
http://tanakalivesinsendai.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away