1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SwiftのOptional型に?をつけて代入した時の挙動

Posted at

Optional変数への代入

次のstrは何が代入されるでしょうか?

var str: String? = nil
str = "Hallo"
print(String(describing: str))

strにはHalloという文字列が代入されるので、strの結果は "Hallo" になります。正確にはOptional("Hallo")になります。

?付きOptional変数への代入

では、次のstrは何が代入されるでしょうか?

var str: String? = nil
str? = "Hallo" // ←?付き変数に代入する
print(String(describing: str))

先程と似たようなコードですが、先程のコードとは違ってstrには?をつけて代入しています。
これはちゃんとビルドが通るコードですが、この場合、strの結果は nil になります。

?付きの値のあるOptional変数へ代入

もう一つ、次のstrは何が代入されるでしょうか?

var str: String? = "Good Morning"
str? = "Hallo" // ←?付き変数に代入する
print(String(describing: str))

このコードも先程と同様、strはOptionalで定義されていますが、strは値を持っています。
この場合、strの結果は "Hallo" になります。正確にはOptional("Hallo")になります。

まとめ

ということで、?つきOptional変数への代入は、nilの場合は何もせず、値がある場合は代入する、という挙動になります。
str?.append("World")のようなコードが、strがnilの場合は何もしないのと一緒の挙動ですね。
?付き変数への代入のコードはビルドできてしまうので、パッと見では気づかない、意図しない挙動を埋め込んでしまう可能性があるので気をつけましょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?