10. オプショナルは
アンラップして使う
var value: String?
value = "こんにちは"
print(value) // Optional("こんにちは")
if let value = value { /** アンラップ処理 **/
print(value) // こんにちは
}
西磨翁『本気ではじめるiPhoneアプリ作り』p.58
11. if let value = value
という書き方推奨
if let unwrappedValue = value { /** アンラップ処理 **/
print(unwrappedValue) // こんにちは
// 別名をつけると間違った呼び出しで不具合が生じる
print(value) // Optional("こんにちは")
}
西磨翁『本気ではじめるiPhoneアプリ作り』p.58
23. ??
var str: String = value ?? ""
Optional Binding
var canBeModified: Bool?
if let value = value,
var canBeModified = canBeModified
where canBeModified {
// do something
}
24. ??
var str: String = value ?? ""
Optional Chaining
オプショナル型のインスタンスを?でつないで
中のプロパティにアクセス
Optional Binding
var canBeModified: Bool?
if let value = value,
var canBeModified = canBeModified
where canBeModified {
// do something
}
29. 抜粋:Apple Inc. “The Swift Programming Language (Swift 3)”。iBooks
Language Guide > The Basics
“Optionals say either
“there is a value, and it equals x”
or “there isn’t a value at all”.”
xという値が存在する
値が存在しない
または
33. o check for a value inside an optional, and to extract tha
抜粋:Apple Inc. “The Swift Programming Language (Swift 3)”。 iBooks
Language Guide > The Basics > Optionals > Optional Binding
オプショナルの値が存在するかチェックする
値が存在するなら定数や変数に取り出す
if節・while節で使われる
34. 抜粋:Apple Inc. “The Swift Programming Language (Swift 3)”。 iBooks
Language Guide > The Basics > Optionals > Optional Binding
36. “If the value before the ? is nil,
everything after the ? is ignored
and the value of the whole expression is nil.
Otherwise, the optional value is unwrapped,
and everything after the ? acts on the unwrapped value.”
Swift Programming Language (Swift 3)”。 iBooks Welcome to Swift > A Swift Tour
?をつけたオプショナルの値がnilなら
?以降を無視し、式全体の値はnilとなる
37. “If the value before the ? is nil,
everything after the ? is ignored
and the value of the whole expression is nil.
Otherwise, the optional value is unwrapped,
and everything after the ? acts on the unwrapped value.”
Swift Programming Language (Swift 3)”。 iBooks Welcome to Swift > A Swift Tour
?をつけたオプショナルの値が存在するなら
?以降ではアンラップした値を扱う
38. class OptionalChainingSample {
var value: String {
get { return _value }
set {
print("setter called")
_value = newValue
print("setter finished")
}
}
private var _value: String = "やあ"
}
オプショナルはアンラップして使うと説明されていました。
valueをオプショナルStringとし、「こんにちは」を代入します。
アンラップ処理の部分で
if let value = value
の部分は最初に見たときはvalueにvalueを代入しているので、
よくわかりませんでした。
黒帯本では
if let value = valueと代入の前後は同名の変数名を使うように説明されています。
別名をつけるとif節の中の間違った呼び出しが起こりうるからだそうです。
コンパイルエラーになるという理由ではなく、
人的エラーを防ぐという理由だったので正直納得できませんでしたが、
そういう決まりとして深く追求しないことにしました。
という訳で、黒帯本からは2つの扱い方を学びました。
一つはオプショナルをnilかチェックして、nilでなければ強制アンラップする方法、
もう一つはif let value = value でnilでない値を取り出す方法です。