-
(Swift) 옵셔녈[Optional] 정리 2/2Programing Language/Swift 2019. 10. 10. 12:23728x90반응형
1. 옵셔널 추출이란?
- 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것
2. 옵셔널 방식
- 옵셔널 바인딩
1. nil 체크 + 안전한 추출
2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
3. if-let 방식 사용func printName(_ name: String) { print(name) } // 함수를 선언할때 _ 문자를 넣게 되면 나중에 그 함수를 불러올때 변수명을 적어 주지 않아도 된다. var myName: String? = nil //printName(myName) //(만약 func printName(_ name: String) { print(name)} 에서 _을 넣지 않았따면) //printName(name : myName) 이라고 적어야한다. // 전달되는 값의 타입이 다르기 때문에 컴파일 오류발생 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
- 강체추출 : 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식, 만약 값이 없을경우(nil) 런타임 오류가 발생하기 때문에 추천되지 않습니다.
var myName: String? = yagom var youName: String! = nil printName(myName!) // yagom myName = nil //print(myName!) // 강제추출시 값이 없으므로 런타임 오류 발생 yourName = nil //printName(yourName) // nil 값이 전달되기 때문에 런타임 오류발생
하지만 강제 추출은 선호 되는 방식이기 아니기 때문에 if-let 구문을 사용해서 옵셔널 값을 벗기는 걷이 선호된다.
728x90반응형'Programing Language > Swift' 카테고리의 다른 글
(Swift) 클래스,구조체/ 열거형 차이 (0) 2019.10.15 (Swift) 구조체 정리 (0) 2019.10.10 (Swift) 옵셔녈[Optional] 정리 1/2 (0) 2019.10.10 (Swift) 반복문 (0) 2019.10.10 (Swift) 조건문 정리 (0) 2019.10.10