0Pricing
Swift Academy · レッスン

オプショナル

オプショナル

「オプショナル」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/1です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全1レッスンが含まれています。

概要

こんにちは。

オプショナル型の変数が値を持たない可能性があることを表すために使用します。

オプショナル型の変数が値を持っている場合、その変数をアンラップして使用します。値を持たない場合もあります。

Swiftで多くの型にオプショナルを使用する

Obj-Cのnilポインタに似ています。ただし、nilポインタはオブジェクト型にのみ有効です。

Swiftのオプショナルは、オブジェクト型だけでなく、Struct、enum、単純型にも使用できます。

var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable 
automatically takes the value of nil.
*/

SwiftのnilとObj-Cのnilは同じではありません

SwiftのnilとObj-Cのnilは同じではありません。

Obj-Cのnilポインタは、オブジェクトが存在しないことを示します。Swiftのnilはnilポインタではありません。Swiftのnilはデータが存在しないことを示し、オブジェクト型だけでなく、他の型もサポートしています。

強制アンラップ

オプショナルとして定義した変数には、強制アンラップを使ってアクセスできます。

感嘆符演算子を使うと、コードで強制的にアンラップできますが、一般的にはあまり推奨されません。

強制アンラップの際に参照先のデータが存在しないと、実行時エラーが発生します。

let convertedNumber : Int? = 123
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."

オプショナルバインディングによるオプショナルへのアクセス

オプショナルバインディングによるオプショナルへのアクセス

if letブロックを使うと、オプショナル型の変数の値を定数または変数に代入してアクセスできます。

強制アンラップを使うよりも、こちらの方法のほうが安全でエレガントです。

var possibleNumber : String? = "10"

if let actualNumber = possibleNumber {
    print(actualNumber)
}

例

if let firstNumber = Int("4"), let secondNumber = Int("42"), 
  firstNumber < secondNumber && secondNumber < 100 {
    print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
 If at least one of them is false,
 it will not be entered in the if blog.
*/

暗黙的アンラップオプショナル

暗黙的アンラップオプショナル

最初の段階でオプショナル値を代入し、その後は絶対にnilにならない場合があります。

このような場合は、オプショナルを (?) で表す代わりに (!) 演算子で表すことで、その値が確実にnilではないことを示します。 

この定義方法を「暗黙的アンラップオプショナル」と呼びます。

暗黙的アンラップ

暗黙的アンラップ

最もよく使用されるのは、クラスの初期化時です。

従来のオプショナルとは異なり、暗黙的にアンラップされる変数を明示的にアンラップする必要はありません。

let possibleString: String? = "An optional string."
 // requires an exclamation mark
let forcedString: String = possibleString!

let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString 

例

この型の変数にnilを代入すると、実行時エラーが発生します。

例を見てみましょう

/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional 
in the same way we use classic optional.
*/

var assumedString: String! = nil

if let definiteString = assumedString {
    print(definiteString)
}
// Prints "An implicitly unwrapped optional string."

警告

変数がnilになる可能性がある場合は、暗黙的アンラップオプショナルを使用しません。

nil合体演算子

nil合体演算子

オプショナル型をアンラップする処理を簡潔に記述できます。

例を見てみましょう。

let defaultColorName = "red"
 // defaults to nil
var userDefinedColorName: String?  

var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil, 
so colorNameToUse is set to the default of "red"
*/


// a != nil ? a! : b 
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn, 
otherwise it returns the default value, ie b.
*/

おめでとうございます

おめでとうございます 🎉

オプショナルはSwiftの最も重要な機能の1つです。オプショナルを使うことでnilチェックを減らし、より簡潔にコードを記述できるため、アプリケーションの安全性も高められます。

次のレッスンでお会いしましょう 🥳

オプショナル — イラスト12

よくある質問

「オプショナル」レッスンは無料ですか?

はい。「オプショナル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全1レッスンが含まれています。

「オプショナル」で何を学びますか?

オプショナル ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/1です。

「オプショナル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

← Swift Academyに戻る