オプション!(feat.swift)
Optionalとは!
今日のポスターのテーマであるOptionは、私が初めてSWIFTを作ったときに「本当に本当に本当に本当に本当に」と理解しにくい2つのコンセプトの1つです.
1つは今日公開されるオプションで、もう1つはCloserです.
もしかすると、もしあなたが私の年齢と似ていて適当な電子工学部で本科レベルの教育を受けたら、入学から卒業までの勉強はC/C++で、この感じとは全然違います.
つまり慣れていないということです.
何が言いたいの?
なぜよく知らないのか話したいです.
C/C++だけでなく,ほとんどのプログラミング言語にない値を処理するのは困難である.
特定の変数が宣言され、その変数に値が割り当てられたり、割り当てられなかったりすることがあります.
// in C++
int x = 10;
このように値を宣言して書きます.その結果、この初期化動作が付属した後、変数の値状態は常に「存在」します.これからの状態から見ると「価格はいくらですか?」フォーカス
その前に、「値は存在しますか?」と聞きます.まず関連する問題を考える必要がある.
これらの面で、存在の意味を追及することは一つの選択だと思います.
話は冗長だが,論点は一つしかない.
「値は存在しますか?」
Optional
これは線の要約です.
let str : String = "Swift" //상수선언
let optionalStr: String? = nil//Optional String선언
let a: Int? = nil//Optional Int선언
このようにして作成されたオプションが変数と定数に割り当てられる場合のタイプについて説明します.let b = a
print(tyoe(of: b))
このように使用することができ、bはオプションのタイプを有する.Optionalはどう書きますか?
もしあなたが選択を宣言して、それからこのように書いたら
let a : Int? = 10
print(a)
上の写真が見えます.
大きな図を見ると、Optionalのハウジングが10のInt値を包んでいるのを感じることができます.
実際、Optionを利用してIntや資料型の形でOptionを使用するためには、価値としてOptionを利用するためには、まずその皮を剥がす必要があります.
皮をむく方法はいくつかありますが、今日は2種類見ます.
ゆっくり理解しましょう.
Forced Unwrapping
Unwrappingで使用する変数の後ろに!貼りましょう.
!後ろに貼ると、カラーシェル内部の強制抽出が行われます.
コードとして次のように使用します.
let a : Int? = 10
print(a!)
とてもシンプルでパワフルに見えます!しかし、強制的な方法があることを知っています.大体、この方法は正しい方法ではありません.
私たちはまずなぜかを理解します.
オプショナルの価格を引き寄せるのがいいです
ただし、Forced Unwrappingの問題は、抽出するオブジェクトの値が存在しないことです.
これは、プログラムが実行中にクラッシュする可能性がある要因の1つです.
だから実際のサービスのアプリで使うと...大事になる可能性があるという意味です.
それでも、この方法でUnwrappingをしなければならないなら、少なくとも1つの安全装置を取り付けてから行きましょう.
安全装置は以下の通りです.
let num : Int? = nil
if num != nil {
print(num!)
}
このように、nilが存在するかどうかを確認し、crashの理由を解消すれば、完全に使用できます.結論は以下の通りです.
Binding
直感的に安全な外部バインドについて説明します.
まずコードを見てみますが、
var num : Int? = nil
if num != nil {
print(num!)
}else {
print("Empty")
}
このように使うのは私たちが上で学んだForced Unwrapping方式です.Bindingでは、
if let n = num {
print(n)
}else {
print("empty")
}
この方法で問題を解決できます.これをオプションバインドと呼びます.Bindingには3つの種類があります.
上記のバインドキーワードで使用できますが、特別な点があればguardセクションです.
他のキーワードのBinding要素が任意の特定の条件下の境界点で行うことができない場合,次の境界点を歩くプログラムが指す感覚がある.
しかしguardはBindingに失敗するとすぐに関数を終了するという特徴がある.
例を挙げて今日の整理を終わらせる
var str: String? = "str"
guard let str = str else {
fatalError()
}
guardはこのように使われています.整理完了!
Reference
この問題について(オプション!(feat.swift)), 我々は、より多くの情報をここで見つけました https://velog.io/@hzw94/Optional-옵셔널feat.swiftテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol