공부한 것 꼭꼭 씹어먹기

optional 본문

Swift 기초

optional

젤라솜 2021. 10. 24. 19:32
반응형
// 옵셔널 타입 변수에 아무값도 할당하지 않았을 경우 기본적으로 nil을 할당함
var name: String?  // nil이 할당됨
name = "Gunter"
// print(name) 해보면 Optional("Gunter")라고 나온다. 
// 옵셔널 변수는 Optional로 값이 포장되어 있어서 일반 변수와 연산할 수 없는데 이를 해결하기 위해 옵셔널 바인딩을 쓴다.

옵셔널 해제 방법

```swift
// 1. 강제 : 이렇게 강제적으로 바인딩을 해제하는 것은 위험. 값이 nil일 경우 에러나기 때무네
var number: Int? = 3
print(number)  // Optional(3)
print(number!) // 3 

// 2. if문 : if문으로 옵셔녈 바인딩을 하면 if 블럭 안에서만 result 변수를 쓸 수 있다
if let result = number {
	print(result)  // 3 => result에는 옵셔널을 해제해서 할당받은 값이 들어있다
}else {
	// 값 추출에 실패했을 경우 else 블럭을 탄다
}

// 3. guard : guard를 쓰면 test함수 블럭 전체에서 result 변수에 담긴 옵셔널 해제값을 쓸 수 있다
func test() {
	let number: int? = 5
	guard let result = number else { return } // 값 추출에 실패했을 경우 else 블럭을 탄다
	print(result)
}
test()  // 5

// 4. 컴파일러에 의한 옵셔널 자동 해제
let value: Int? = 6
if value == 6 {
	print("value가 6입니다") // 비교연산자를 이용해 비교를 하면 컴파일러가 자동으로 옵셔널 해제 해줌
} else {
	print("value가 6이 아닙니다")
}

// 5. 묵시적 해제
let string = "12"
var stringToInt: Int? = Int(string)
print(stringToInt + 1)
// string을 int로 캐스팅할 때는 옵셔널 변수로 받아야 한다. 
// string변수에 숫자로 변환할 수 없는 문자가 들어갈 수도 있기 때문이다.
var stringToInt: Int! = Int(string)
// 타입 뒤에 !를 붙이면 그 변수를 사용할때 묵시적으로 옵셔널이 해제된다.
```

 

 

패스트캠퍼스 ios 앱 개발 강의를 듣고 공부한 내용을 정리하였습니다.

반응형

'Swift 기초' 카테고리의 다른 글

상속  (0) 2021.10.27
property  (0) 2021.10.26
class, struct, enum  (0) 2021.10.25
함수  (0) 2021.10.24
switch, for, array, dictionary, set  (0) 2021.10.24
Comments