[Swift] 옵셔널 체이닝과 빠른 종료

김태형·2023년 3월 26일
0

Swift

목록 보기
15/22
post-thumbnail

이번 글에서는 옵셔널 체이닝과 빠른 종료에 대해 작성해보려고 한다.


옵셔널 체이닝

  • 옵셔널에 속해 있는 nil일지 모르는 프로퍼티, 메소드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 과정
  • 프로퍼티나 메소드 또는 서브스크립트를 호출하고 싶은 옵셔널 변수나 상수 뒤에 물음표(?)를 붙여 표현
class Room {
    var number: Int
    
    init(number: Int) {
        self.number = number
    }
}

class Building {
    var name: String
    var room: Room?
    
    init(name: String) {
        self.name = name
    }
}

struct Address {
    var province: String
    var city: String
    var street: String
    var building: Building?
    var detailAddress: String?
}

class Person {
    var name: String
    var address: Address?
    
    init(name: String) {
        self.name = name
    }
}

let ted: Person = Person(name: "ted")

let tedRoomViaOptionalChaining: Int? = ted.address?.building?.room?.number  //nil
let tedRoomViaOptionalUnwraping: Int? = ted.address!.building!.room!.number  //런타임 에러
  • 옵셔널 바인딩을 통해 옵셔널 체이닝을 간단하게 표현할 수 있음
let ted: Person = Person(name: "ted")

if let roomNumber: Int = ted.address?.building?.room?.number {
	print(roomNumber)
} else {
	print("Can not find room number")
}
  • 옵셔널 체이닝을 통해 값을 할당해주려면 옵셔널 체인에 존재하는 프로퍼티를 실제로 할당해줘야 값이 반환됨
  • 만약 값이 없다면 nil로 반환됨
ted.address = Address(province: "인천광역시", city: "부평구", street: "마장로", building: nil, detailAddress: nil)
ted.address?.building = Building(name: "무지개아파트")    //값 할당
ted.address?.building?.room = Room(number: 0)
ted.address?.building?.room?.number = 1508

print(ted.address?.building?.room?.number)    //Optional(1508)

빠른 종료

guard 구문

  • Bool 타입의 값으로 동작하는 기능
  • guard 뒤에 따라붙는 코드의 실행 결과가 true일 때 코드가 계속 실행됨
  • 항상 else 구문이 뒤에 따라와야 함
  • else에는 자신보다 상위의 코드 블록을 종료하는 코드가 들어가게 됨 —> 특정 조건에 부합하지 않다는 판단이 되면 코드 블록의 실행을 종료함
  • 예외사항만을 처리하고 싶다면 사용 !
  • 하지만 제어문 전환 명령어 (return, break, continue, throw)를 쓸 수 없다면 사용 불가능
//if 구문
for i in 0...3 {
    if i == 2 {
        print(i)
    } else {    //else를 통해 continue를 진행해야 한다
        continue
    }
}

//guard 구문
for i in 0...3 {
    guard i == 2 else { continue }
    print(i)
}


[출처] 스위프트 프로그래밍 (야곰), 야곰의 스위프트 기초문법 강좌, 개발하는 정대리 스위프트 강좌

0개의 댓글