1. ホーム
  2. swift

[解決済み] Swiftの変数に"?"(クエスチョンマーク)と"!"(エクスクラメーションマーク)の装飾を施す。

2022-10-23 23:57:36

質問

Swift では、すべての変数に値を設定する必要があり、オプションの使用によって、変数に nil に初期設定することができます。

私が理解していないのは、変数を設定する際に ! というのは、これはオプショナルから値をアンラップするものだという印象を受けたからです。そうすることによって、その変数にアンラップする値があることを保証しているのだと思いました。

簡単に言うと、このようなことをしたときに初期化される変数は何なのか、ということです。

var aShape : CAShapeLayer!

そして、なぜ/いつこれを行うのでしょうか?

どのように解決するのですか?

型宣言で !? . どちらもオプショナルですが ! は " です。 暗黙のうちにアンラップされる" オプションです。 であり、値にアクセスするためにアンラップする必要がないことを意味します(しかし、それはまだnilであることができます)。

これは基本的に、私たちがすでにobjective-cで持っていた動作です。ある値 はnilである可能性があり、それをチェックしなければなりませんが、オプショナルでないかのように値に直接アクセスすることもできます(nilをチェックしない場合は実行時エラーが発生するという重要な違いがあります)。

// Cannot be nil
var x: Int = 1

// The type here is not "Int", it's "Optional Int"
var y: Int? = 2

// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3

使用方法

// you can add x and z
x + z == 4

// ...but not x and y, because y needs to be unwrapped
x + y // error

// to add x and y you need to do:
x + y!

// but you *should* do this:
if let y_val = y {
    x + y_val
}