Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 574 - オプショナル

詳解 Swift 改訂版」を超スローペースで進んでいて、今日からやっとChapter4 オプショナルに入ります。

Swiftにとって、オプショナルは特徴の1つになっているようですが、私はSwift以外の言語を知らないので、オプショナルが特殊な型に見えません。というか他の型同様のインパクトしかありません(^_^;)

今更ながら「扱うデータがない」状態をとりうる型という説明です。

ただiOSの基盤を作っているObjective-Cとの互換を考えなければいけないため、Onjective-Cの「空ポインタ」を意味する「NULL」と同様の意味が「nil」に含まれているそうです。ポインタの概念が無いSwiftnilとは少し意味あいが異なるようですが、私にはよく分かりません。扱う値が存在しない状態とう特別な値が「nil」です。

この本で面白い例文がオプショナルの頭で出てきます。オプショナルを返すイニシャライザをいきなり説明しています*1。 荻原さんは、「失敗のあるイニシャライザ」と説明しているイニシャライザがあります。私は以前から「失敗許容イニシャライザ」と訳しているので、そのまま失敗許容イニシャライザを使います。

Int型のイニシャライザの例を挙げています。実は、イニシャライザは1つじゃありません。指定イニシャライザを基盤として、簡易イニシャライザと失敗許容イニシャライザを組み込むことで、数々のタイプのイニシャライザを用意して構造体やクラスのインスタンス化をサポートすることができます。私はプログラミングの勉強を始めた時、イニシャライザは1つだけだと思ってました。

Int型のイニシャライザに話を戻しますが、Int型のイニシャライザも複数あるようです。少し前に説明したイニシャライザを覚えていますか? リンク先はDouble型のイニシャライザで説明をしていますが、Int型でも同様なので、Int型に変更して解説します。

let myDouble: Double = 12
var myInt: Int = Int(myDouble)

このInt型のイニシャライザはDouble型を引数にしているのでオプショナルを返しません。しかし引数がString型の場合は失敗許容イニシャライザになります。

let myDouble: String = "12" // 定数名は変更していません。
var myInt: Int? = Int(myDouble)

この場合、オプショナルInt型が返されています。値を使用するために「!」アンラップが必要です。

今日は触りだけです。

*1:こういうところが初心者向けじゃないですね(^_^;