Optional
Optionalとは?
SWIFTは、
なぜ選択する必要があるのですか?
プログラミング中に多くのエラーが発生します.Optionalが存在するのは、発生する可能性のあるエラーを最小化するためです.いずれの場合も、多くのエラーを安全に処理するために、有価と無価に分けることができます.
たとえば、一部のデータに値がなく、プログラムでデータにアクセスしたときにエラーが発生する可能性があります.未然に防ぐために作られた文法といえる.
「Optionalのベールにデータ値を隠す」という言い方がいいかもしれません.
データは有価なのか無価なのか、実際のデータを利用するためには隠れた価格で使わなければなりません.
この場合,4つの方法で囲まれた値に近づくことができる.
オフセットバインド、オフセット、強制抽出、nil連結演算子
Optional Binding
if let構文でoptionalの値がnilであることを削除する場合は、構築中のブロックを実行し、nilである場合はelse構文またはif letブロックの外部のコードを実行します.
guard let構文はif let構文とは逆に、optionalの値がnilである場合、else構文のブロックを実行します.そうしないと、次のコードが実行されます.
では、if letはいつ書きますか.guard letはいつ書きますか.
if let構文とguard letの最大の違いは、if let構文によるoptionalの値の除去がif letブロック内部でのみ利用可能であることである.
ただしguard letの場合は、以降のコード行でも使用できます.
func optionalBinding() {
if let optional을 벗긴 값 = optional을 벗길 값 {
// "optional을 벗길 값"이 nil이 아니라면
// 여기서 "optional을 벗긴 값"을 사용할 수 있다.
}
// 근데 여기서는 "optional을 벗긴 값"을 사용할 수 없다!
guard let optional을 벗긴 값 = optional을 벗길 값 else {
// "optional을 벗길 값"이 nil일 경우 이 블록이 실행된다.
return
}
// "optional을 벗길 값"이 nil이 아닐 경우 이후 코드에서 "optional을 벗긴 값"을 사용할 수 있다.
}
Optional Chaining
階層化された選択肢タイプでOptional Chaining、特に使用方法を使用する場合.
struct Person {
var name: string
var home: String?
}
let chuuuny: Person? = Person(name: "chuuuny", home: "서울")
func optionalBinding() {
guard let chuuuny = chuuuny, let home = chuuuny.home else {
return
}
}
func optionalChaining() {
guard let home = chuuuny?.home else {
return
}
}
Optional BindingでZunyがどこに住んでいるかを知るためには、Zunyの家があるかどうか、家があればどんな家なのかを知る必要があります.(オプションBindingメソッド)しかし、上記の2つ以上の選択Bindingは、オプションを変更することによって簡潔に処理することができる.
Nil Coalescing Operator
Nil Collecting Operatorは、左側のオフセット値がnilの場合に代替値を指定できる演算子です.
func nilCoalescingOperator() {
// chuuny가 nil이라면 Person 객채를 새로 생성한다.
let chuuny = chuuny ?? Person(name: "chuuny", home: "경기도")
// chuuny의 home이 nil이라면 chuuuny의 home을 "경기도" 으로 대체한다.
let home = chuuny.home ?? "경기도"
}
Forced Unwrapping
その名の通り、オプションで包んだ値があるかどうかを確認せずに、そのまま剥がす方法です.
値をすばやく簡単に抽出できますが、剥がす値がnilの場合、ランタイムエラーが発生します.
func forcedUnwrapping() {
let chuuuny = chuuuny!
let home = chuuuny.home!
}
Forced Unwrapping普通は使わないでください!!比較オプション
アマチュア学習で新しい面白いものを見つけた.
let a: Int? = Optional(10)
let b: Int = 10
print(a == b) // true
実際、上に表示されているのはtrue
!オプショナルで包んだ価格と普通の価格をどう比較できますか?
これはSWIFT Githubのオプション実装コードによって理解できる.
Swift Github
簡単に言えば、比較がオプションの値ではない場合は、オプションの値で包んで比較します!
@inlinable
public static func ==(lhs: Wrapped?, rhs: Wrapped?) -> Bool {
switch (lhs, rhs) {
case let (l?, r?):
return l == r
case (nil, nil):
// 둘다 nil인데 값이 true? 이건 좀 신기하네용 ㅋㅋ
return true
default:
return false
}
}
Reference
この問題について(Optional), 我々は、より多くの情報をここで見つけました https://velog.io/@kch1285/Optionalテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol