2019/12/5 Swift オプショナル型 パート1

オプショナル型とは

オプショナル型はジェネリック型の列挙型として定義されていて、

「ある型の値」、あるいは「値が存在しない(nil)」

ということを表す型です。

sample1-1

let str1="777"
let num1=Int(str1)
print(num1)
//Optional(777)

SwiftのInt型にはString型の変数の値をInt型に型変換するイニシャライザがあるのですが、全ての文字列が数値に変換できる訳ではありません。

例えば文字列”777″は数値の777に型変換できますが(sample1-1)、文字列”abc”はInt型に型変換できません。

つまりイニシャライザInt()は必ずInt型に変換した値を返せるとは限らない、し失敗することもある、ということです。ですのでsample1-1の結果が示す通り、イニシャライザInt()はOptional<Int> 型の値を返します。

Optional<Int>型は簡易的な記法としてInt?と記述することもでき、通常こちらの書き方が用いられます。

Optional<Int>=Int?

Int?(Optional<Int>)型は整数の値を保持している、あるいは値がない、ということを表します。

sample1-1では文字列”777″はInt型への型変換が成功しますので、定数num1には列挙型Optional<Int>.some(777)がセットされます。sample1-1の結果にあるようにOptional<Int>.some(777)にも簡易的な記法が用意されており、Optional(777)と記述できます。


nil

sample2-1

var num4:Int?=nil
print(num4)
//nil

Optional型の変数にnilを代入することで、値が存在しないことを表すことができます。


sample2-2

var str1="777"

str1=nil

//error: 'nil' cannot be assigned to type 'String'

オプショナル型でない変数にnilを代入することはできません。なので値がない状態が考えられる変数・定数は必ずオプショナル型として宣言する必要があります。


sample2-3…