[解決済み] 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
}
関連
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] なぜ「Implicitly Unwrapped Optionals」を作るのか、それは値があることを知っていることを意味しているからです。
-
[解決済み] SwiftでOptionalにデフォルト値を提供する?
-
[解決済み] Swiftで1つのビューコントローラの向きを縦向きのみに固定する方法
-
[解決済み] Swiftでbutton.addTargetアクションにパラメータを付ける
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: インデックスで文字列配列を置換する
-
[解決済み] SwiftUIのForEachでインデックスを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] Swift 3でカスタム通知を作成するには?
-
[解決済み] SwiftUI。TextFieldをファーストレスポンダーにするには?
-
[解決済み] Swiftスクリプトでターミナルコマンドを実行するには?(例:xcodebuild)
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
-
[解決済み] Swift - サブクラスでオーバーライドする必要があるクラスメソッド
-
[解決済み] ビルド入力ファイルが見つかりません」Swift 4.2、Xcode 10.0
-
[解決済み] SwiftUIのForEachでインデックスを取得する