Swift 2でtoIntが使えない!unavailableエラーが出た時の対処方法
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
Swift 2でtoInt()を使うと、
‘toInt()’ is unavailable: Use Int() initializer
というエラーが出てしまいます。そんな時の対処方法について解説したいと思います。
Swift 2ではtoInt()が廃止された
Swift 2では、toInt()が廃止されてしまいました。
先ほどのエラーメッセージをよく見ると
‘toInt()’ is unavailable
と書いてあることからも分かります。
toInt()のかわりにInt()イニシャライザを使う
ではどうやって文字列をInt型の数値に変換すれば良いのでしょうか?
先ほどのエラーメッセージをよく見ると
Use Int() initializer
と書いてあるので、Int()イニシャライザーを使いましょう。
let str = "123" let num = Int(str)
これで文字列strをInt型の数値に変換できます。
変換に失敗した時のことを考える
ただし、文字列を数値に変換するという処理には失敗がありえます。
例えば “123” という文字列は数値 123 に変換できますが、 “Hello” という文字列は数値に変換できません。
よって、Int(str)の結果はIntではなくInt?(Intのオプショナル)となっており、変換に失敗した場合にはnilが返ってきます。
なので、実際には以下の様なコードを書く必要があるでしょう。
例1 if letを使う場合
let str = "123" if let num = Int(str) { // 変換に成功した場合 // ここで変換結果numを使って、処理を行える print(num) }else{ // 変換に失敗した場合 // 変換に失敗しているので、変換結果numは存在せず、使用できない }
例2 guard letを使う場合
func method() { let str = "123" guard let num = Int(str) else { // 変換に失敗した場合 // 変換に失敗しているので、変換結果numは存在せず、使用できない return // ここでmethodの処理は終了 } // 変換に成功した場合 // ここで変換結果numを使って、処理を行える print(num) }
例3 ??を使う場合
let str = "123" // 変換に成功したらその結果をnumに入れる。 // 変換に失敗したら 0 をnumに入れる。 let num = Int(str) ?? 0
@akio0911はこう思った。
今回紹介したのはSwift 2での仕様変更が原因のエラーなので、僕が主催しているアプリ開発講座でも頻繁に質問される内容だったりします。
ちなみに、サンプルコード内で使った if let や guard let などの詳しい使い方については、以下の本に載っています!
関連記事
この記事が気に入ったら「いいね!」しよう
Twitterで更新情報をゲット!