【対処法】Swift 2(iOS 9)ではUITextFieldのtextがString?になっている

公開日: : 最終更新日:2016/02/10 iPhoneアプリ開発

20160129-115948.jpg

Swift 1(iOS 8)時代において、UITextFieldのtextプロパティは

var text: String!

だったのですが、Swift 2(iOS 9)で型が変更されて

var text: String?

となりました。これによってコードを修正しなければならない場合があるので、解説したいと思います。

    

スポンサード リンク

String型の定数・変数などに代入する場合

Swift 1(iOS 8)

textプロパティの型はString!なので、そのまま代入していました。

let text : String = textField.text

    

Swift 2(iOS 9)

先ほどのコードをそのまま使ってしまうと、

let text : String = textField.text

以下のようなエラーが出てしまいます。

value of optional type ‘String?’ not unwrapped; did you mean to use ‘!’ or ‘?’?

textプロパティの型はString?だから、String型の定数や変数にそのまま代入できません。

以下のようなコードを書いて対応しましょう。

    

!を使ってForced Unwrapping(強制的アンラップ)する

let text : String = textField.text!

    

代入先の定数・変数の型をString?に揃える

let text : String? = textField.text

    

if let を使う

if let text : String = textField.text {
    // textを使って何らかの処理を行う
}

    

?? を使って、textプロパティがnilの時には “”(空文字)を代入する

let text : String = textField.text ?? ""

    

textプロパティの中身を数値に変換したい場合

まず注意点として、Swift 2ではtoInt()が使えなくなっています

Swift 2でtoIntが使えない!unavailableエラーが出た時の対処方法

    

Swift 1(iOS 8)

toInt()を使ってInt型の数値に変換していました。

let num : Int? = textField.text.toInt()

ただし、toInt()での変換は失敗する場合があり(”Hello”などの文字列を数値に変換しようとした場合など)、その変換結果はIntではなくInt?なので、if letなどを使って適切に処理する必要があります。

if let num : Int = textField.text.toInt() {
    // 変換成功。numを使って処理を行う
}else{
    // 変換失敗。
}

    

Swift 2(iOS 9)

textプロパティがString?型であり、toInt()も使えなくなっているので、かわりにInt()イニシャライザーを使って適切に処理しなければなりません。

    

2つのif letで場合分けする

if let text : String = textField.text {
    // textがnilではなかった場合

    if let num : Int = Int(text) {
        // 数値に変換できた場合
    }else{
        // 数値に変換できなかった場合
    }
}else{
    // textがnilだった場合
}

    

1つのif letで場合分けする

if let text : String = textField.text, num = Int(text) {
    // textがnilではなくて、textをInt型の数値に変換できた場合
}else{
    // textがnilか、textをInt型の数値に変換できなかった場合
}

    

textがnilの場合は””(空文字)、Intに変換できなかった場合は0扱いにする

let text : String = textField.text ?? ""
let num : Int = Int(text) ?? 0

    

上記の例を1行にまとめる

let num : Int = Int(textField.text ?? )

    

flatMapを使って変換する(ただしnumはInt?)

let num : Int? = textField.text.flatMap{ Int($0) }

    

@akio0911はこう思った。

Swift 2・Xcode 7・iOS 9に移行して、つまづきやすいポイントのうちの1つが、今回紹介したUITextFieldのtextプロパティの扱いかなあと思います。

オプショナル型(String?・Int?)やif letなどについては以下の本に詳しく載ってます!

    

この記事が気に入ったら「いいね!」しよう

follow us in feedly

Feedlyで最新記事を購読

Twitterで更新情報をゲット!

LINEでご感想・ご要望お送りください!
(スマホでLINEを起動 > 友だち追加 > QRコード)

関連記事

20140905-180905.jpg

英語苦手な人がSwiftを学びたいならこの本を読むといいよ!

アップルのWWDC2014で発表された、iOSおよびOS Xのためのプログラミング言語「Swift」

記事を読む

I20160417-171311.jpg

Xcodeのブレークポイントで変数の中身を通知センターに表示してみる

Xcodeのブレークポイントの機能を使って、ブレークポイントを通過した時点での変数の中身を通知セ

記事を読む

20160807-113229.jpg

UITableViewのリサイズに合わせて一番下のセルを常に一番下に表示する方法

一番下のセルを表示している状態でUITableViewの下端を上に移動させると一番下のセルが隠れ

記事を読む

I20160409-211651.jpg

Xcode 7.3の新機能についてまとめてみた

2016年3月22日にXcode 7.3がリリースされましたが、自分が知らない機能があるかもしれ

記事を読む

I20160918-133158.jpg

StoryboardでChild View Controllerにデータを渡す方法(Xcode 8 & Swift 3)

Storyboardで、Child View Controllerにデータを渡す方法を紹介します

記事を読む

I20160122-095132.jpg

Swift 2のドキュメントコメントの書き方(JavaDoc的なやつ)

コード補完時やoptionクリック時などに説明が出てくるようにする「ドキュメントコメント(J

記事を読む

20160423-124300.jpg

【RxSwift】Hot変換オペレータの1つであるshareReplayを使ってみる

最近、RxSwiftについて勉強中です。 今回は、Hot変換オペレータの1つであるshareR

記事を読む

I20160119-155700.jpg

Xcodeで80文字目のところにガイドラインを表示する方法

Xcodeで80文字目のところに線(ガイドライン)を表示する方法について解説します! 「ソース

記事を読む

20150522-105524.jpg

【書籍】初心者にオススメな本!「これからはじめる Apple Watchアプリ開発入門」

Apple Watchは買いましたか?使ってますか?アプリを作ってみたくはないですか? という

記事を読む

I20151126-170621.jpg

Swift 2のprintで改行しない方法

Swift 1時代はprintlnで改行あり、printで改行なしでしたが、Swift 2ではp

記事を読む

I20170228-002742.jpg
約3ヶ月で体脂肪率を6.2%も落とせたキッカケについて

(右上の赤枠内がダイエット開始前、左下の赤枠内が3ヶ月後の数値

I20161224-174949.jpg
「季節の野菜を直接配送!季節のスムージー」を買ってみた

「FiNCモール」で、「季節の野菜を直接配送!季節のスムージー」を

I20161002-152537.jpg
【メンズネイル】東京・新宿のネイルサロンでマットネイルしてもらった

2016年7月18日、東京・新宿のメンズOKなネイルサロン「Tot

I20160925-163452.jpg
タブバーアイコン非選択時の色を変更する方法【iOS 10】

UITabBarControllerで、タブバーアイコン非選択時の

I20160924-123726.jpg
iPad Pro 9.7インチ SIMフリーモデルにFREETELのSIMを入れて使ってみた

今までiPad miniで使っていたFREETELのSIM

→もっと見る

PAGE TOP ↑