Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@Howasuto

【Swift】オプショナル型の使い方

More than 1 year has passed since last update.

オプショナル型とは?

オプショナル型はSwiftの特徴の一つであり、値がnilの可能性がある時に用いられる型です。
このオプショナル型はその値がnilである可能性を示してくれるため非常に便利な型なのですが、扱い方を間違えるとコンパイルエラーになったりバグの要因になります。

今回はそんなオプショナル型の使い方について考えていきます。

Optional < Wrapped >型を用いる時

まず下記のコードを見てください。このコードはRPGに出てくる武器の構造体です。定数として名前(name)、攻撃力(offensivePower)、追加効果(additionalEffect)が定義されています。
ここで注目すべき点はadditionalEffectのかたがString?となっている点です。この?がオプショナル型を表していて、この定数がnilの可能性があることを示しています。
このように値が定かではない値にはオプショナル型を定義していきましょう。

struct Weapon {
  let name: String
  let offensivePower: Int
  let additionalEffect: String?
}

暗黙的にアンラップされたOptional型

下記のコードを見ると変数の定義時に!を指定することでアンラップが暗黙的に行われています。
しかし初期化されていない値に対してアクセスしたため実行時エラーになっています。
このように暗黙的なアンラップは危険な面があります。しかし、初期化時に値が決まっていなくても、初期化以降に必ず値が設定される場合は用いたほうが、可読性も上がり効率的です。

class Sample {
  var value: String!
}

let sample = Sample()
sample.value //実行時エラー

以下が利用した方が良い例です。
このコードはStoryboard上に配置した要素から自動的に生成されるコードで、Storyboard上の要素と@IBOutlet属性とともに宣言されたプロパティと紐づけています。
このsomeLabelプロパティはインスタンス化される際には空ですが、その後にStoryboardから生成された値が設定されるので、暗黙的にアンラップして大丈夫です。
もしここでアンラップしなければオプショナルバインディングを別で行わなければならないため、そちらはコードを冗長にしないためにも止めておきましょう。

@IBOutlet weak var someLabel: UILabel!
1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Howasuto
iOSエンジニア
tresInnovation
当社は新しいアイディアから社会的意義のある新たな価値を創造し、社会に大きな変化をもたらす組織、社会の幅広い変革に貢献できるような会社を創る事をモットーにしております。VR事業、HR事業、EC事業、クリエイティブ事業、広告事業と多岐に渡る事業内容で世の中にワクワクを創造している会社です!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?