옵셔널의 구현

냐옹·2024년 7월 15일
0

IOS

목록 보기
29/32

옵셔널의 구현

let name : Optional<String> = nil

// 축약형
let name : String? = nil

// 초기화 없을 시 nil로 자동 초기화
let name : String?

까지 줄어들 수 있다.

옵셔널은 열거형, 제네릭

  • 옵셔널은 열거형으로 구현이 되어있고, 제네릭으로 선언이 되어있다.
  • 때문에 어떤 타입으로도 받을 수 있다.
    ㄴ none
    ㄴ some(Wrapped)

사용

if name == nil {}

// enum 이기 때문에 다음도 가능하다.
if name == .none {} // name에 값이 없는 경우
if name == .some("Johnson") // name의 값이 Johnson인 경우

옵셔널 패턴 ?

if case .some(let n) = name{
	print(n)
}

줄이지 않고, enum인 점을 감안해서 사용하면 다음과 같이 쓸 수 있다.

if case let n? = name { print(n) }
if case / guard case
  • switch를 쓸수는 있는데, 조건이 1개더라도 default까지 설정해줘야해서 귀찮은 경우 때문에 if case / guard case가 생기게 되었음
func useWomenRestroom(gender: Gender){
	if case .male = gender{
		// 
	}
}

func useWomenRestroom(gender : Gender){
	guard case .female = gender else {
		//
	}
}
  • 연관값이 있는 열거형을 처리하기 위해서
enum Gender{
  case male(age : Int) // 연관값
  case female
}

func useMenRestroom(gender : Gender){
	guard case let .male(age) = gender else{
    	print("out")
      	return
    }
  	print(age)
}
  • 옵셔널 패턴을 사용할 경우 좋은 점
let arrayOfOptionalInts : [Int?] = [nil, 2, 3, nil, 5]
                           
var count = 0
for number in arrayOfOptionalInts{
	count += 1
    guard let number = number else{
    	print("nil")	
		return
    }
}
var count = 0

for case let number? in arrayOfOptionalInts{
	count += 1
  	print(number)
}

0개의 댓글