SWIFTオプションについて
熊に与える授業資料。
表示値はあってもなくてもかまいません.
nilが割り当てられるかどうかを示す
明示的な表示
1.nilの可能性はコードで表すことができる
2.文書/注釈の作成時間を短縮
安全に使用
1.渡された値が外部値でない場合、nilチェックなしで使用
2.安全符号化、異常を最小限に抑える
3.効率的な符号化
外来文法
Enum+汎用(列挙+バイナリ)
宣言感嘆符(!)暗黙的抽出グローバル(Implicy Unwraped Option) を使用疑問符(?)
傍観者の値を使用するためにポップアップ
1)外部バインド
1.nil検査+安全抽出
2.確認オプションに値が含まれていることを確認し、値がある場合は値を取り出します.
3.if-let方式の使用
見張りの先鋒とは何ですか。
表示値はあってもなくてもかまいません.
nilが割り当てられるかどうかを示す
なぜ守望先鋒を使うのですか?
明示的な表示
1.nilの可能性はコードで表すことができる
2.文書/注釈の作成時間を短縮
安全に使用
1.渡された値が外部値でない場合、nilチェックなしで使用
2.安全符号化、異常を最小限に抑える
3.効率的な符号化
// someOptionalParm에 nil이 할당 될 수 있다.
func someFunction(someOptionalParam: Int?) {
// ....
}
/// someOptionalParm에 nil이 할당 될 수 없다.
func someFunction(someOptionalParam: Int) {
// ....
}
someFunction(someOptionalParam: nil) // 가능
someFunction(someParam: nil) // 오류
構文と宣言
外来文法
Enum+汎用(列挙+バイナリ)
宣言
enum Optional<Wrapped>: ExpressibleByNiliteral {
case none // optional 값이 있다.
case some(Wrapped) // optional 값이 없다.
}
let optionalValue: Optional<Int> = nil
let optionalValue: Int? =nil
外来表現
// Implicitly Unwrapped Optional
var implicitlyUnwrappedOptionalValue: Int! = 100
switch implicitlyUnwrappedOptionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// 기존 변수처럼 사용 가능
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// nil 할당 가능
implicitlyUnwrappedOptionalValue = nil
// 잘못된 접근으로 인한 런타임 오류 발생(optional 변수 접근)
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// Optional
var optionalValue: Int? = 100
switch optionalValue {
case .none:
print("This Optional variable is nil")
case .some(let value):
print("Value is \(value)")
}
// nil 할당 가능
optionalValue = nil
// 기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산불가
optionalValue = optionalValue + 1
外来抽出とは何ですか。
傍観者の値を使用するためにポップアップ
1)外部バインド
1.nil検査+安全抽出
2.確認オプションに値が含まれていることを確認し、値がある場合は値を取り出します.
3.if-let方式の使用
func printName(_ name: String) { // name:string 타입
print(name)
}
var myName: String? = nil
//printName(myName) // optinal타입 전달
// 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생
if let name: String = myName {
printName(name)
} else {
print("myName == nil")
}
var yourName: String! = nil
if let name: String = yourName {
printName(name)
} else {
print("yourName == nil")
}
// name 상수는 if-let 구문 내에서만 사용가능합니다
// 상수 사용범위를 벗어났기 때문에 컴파일 오류 발생
//printName(name)
// ,를 사용해 한 번에 여러 옵셔널을 바인딩 할 수 있습니다
// 모든 옵셔널에 값이 있을 때만 동작합니다
myName = "yagom"
yourName = nil
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
// yourName이 nil이기 때문에 실행되지 않습니다
yourName = "hana"
if let name = myName, let friend = yourName {
print("\(name) and \(friend)")
}
// yagom and hana
2)リジッドボディ抽出:実行プログラムが値を強制的に抽出することを推奨しません.値が含まれているかどうかを確認しないため、値(nil)がない場合、実行時エラーが発生します.var myName: String? = yagom
// optional 타입 강제 추출
printName(myName!) // yagom
myName = nil
print(myName!)
// 강제추출시 값이 없으므로 런타임 오류 발생
var youName: String! = nil // 선언할때 강제추출:nill값 할당
printName(yourName)
// nil 값이 전달되기 때문에 런타임 오류발생
Reference
この問題について(SWIFTオプションについて), 我々は、より多くの情報をここで見つけました https://velog.io/@jimmy48/Swift-Optional-이해하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol