Optionals
❓Optionals
값이 없다.
let num: Int // type annotaion 으로 자료형 지정
print(num) // 저장된 값이 없음
なぜオプションが必要ですか?
->値が保存されていない場合、接近時にエラーが発生します
->傍観者を使用してこの問題を処理する
let optionalNum: Int? = nil
Optional Binding
バインドは何ですか?
→具体的な価値・性質を特定する.に値を付ける
var num: Int? = nil
print(num!) // 값 강제 추출
/*binding */
if let name:TYPE = EXP {} //값이 있을 때만 binding
if num != nil {
print(num!} //강제 추출 num은 optionalInt
}
/*위와 같음*/
if let n = num { // unwrapping 돼서 바인딩 됨
print(n) // n은 Int n. (num 변수랑 같은 이름이어도 됨)
}
guard let num = num else{} // 이후 구문에서 num 사용 !!!!
let a: Int? = 12
let b: String? = "str"
if let num = a, let str = b, str.count > 5 {} // 모든 바인딩이 성공한 경우에만 바인딩 성공!!
Implicitly Unwrapped Optionals
!
→自動抽出のオプション.強制抽出不確定値の存在let num: Int! = 12
let a = num // a는 optional Int ,형식추론을 하는 경우에는 자동으로 추출되지 않음
let b: Int = num // num이 Int? 면 에러나서 대입할 때 ! 해줘야함
実際によく使うわけではありません.nonoptionalを入れると自動的に抽出され、optionalに直接書き込まれますOptional Chaining
簡単に言えば、optionalを連続的に呼び出す
var optionalP: Person? = Person(name: "jame", email: "[email protected]")
let b = optionalP?.contacts.name
// -> b의 자료형은 string 이 아닌 optional string
getFunction()?.value // method 가 optional 을 return
let f: (() -> Person?)? = p.getFunction // 함수 자체가 optional
f?()?.vlaue // 괄호 앞에 ? 붙임
var num = address["citi"]?.count
Optional Pattern
傍観者は列挙型として現れ、ケースといくつかのケースはない.
if let x = a {}
// ==
if case .some(let x) = a {}
// == enumeration case pattern + optional pattern
if case let x? = a { //optional version identifier 뒤에 물음표 붙임
print(x)
// a상수에 값이 있으면 x 에 할당, binding 되고 실행됨, 바인딩되는 시점에 unwrapped
}
Reference
この問題について(Optionals), 我々は、より多くの情報をここで見つけました https://velog.io/@youn_22/Optionalsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol