Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 다트
- 스위프트
- 스위프트프로그래밍
- 테스트자동화
- Swift5
- 테스트오토메이션
- 다트언어
- SWIFT
- pythonautomation
- 스위프트개발
- 야곰스위프트
- 티스토리챌린지
- qaautomation
- robotframework
- 파이썬자동화
- dartlang
- testautomation
- 테킷앱스쿨
- 다트기초문법
- 오블완
- 로봇프레임워크
- Python
- 다트기본문법
- QA자동화
- DART
- 플러터
- ios개발
- iOS프로그래밍
- playwright
- Flutter
Archives
- Today
- Total
day_by_day
14. 옵셔널 체이닝과 빠른종료 본문
옵셔널 체이닝과 옵셔널 바인딩의 차이
Swift에서 옵셔널 체이닝과 옵셔널 바인딩은 모두 옵셔널을 처리하는 데 사용되는 방법이다.
옵셔널 체이닝은 옵셔널 값의 속성이나 메서드에 액세스하는 데 사용되는 반면, 옵셔널 바인딩은 옵셔널 값이 nil이 아닌지 확인하고 값이 nil이 아니라면 값을 변수에 할당하는 데 사용됩니다.
14.1 옵셔널 체이닝
- 옵셔널에 속해 있는 nil 일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정
- 옵셔널을 반복 사용하여 옵셔널이 자전거 체인처럼 서로 꼬리를 물고 있는 모양이기 때문에 옵셔널 체이닝이라고 부른다
- 옵셔널에 값이 있다면 프로퍼티, 메서드 등 호출 가능
- 옵셔널이 nil 이라면 nil 반환
- 중첩된 옵셔널 중 하나라도 값이 존재하지 않는다면 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 blair: Person = Person(name: "blair")
let blairRoomChaning: Int? = blair.address?.building?.room?.number
print(blairRoomChaning) //nil
- 옵셔널 바인딩 예제
let blair: Person = Person(name: "blair")
var roomNumber: Int? = nil
if let blairAddress: Address = blair.address {
if let blairBuilding: Building = blairAddress.building {
if let blairRoom: Room = blairBuilding.room {
roomNumber = blairRoom.number
}
}
}
if let number: Int = roomNumber {
print(number)
} else {
print("Can not find room number")
}
//위와 동일한 표현
if let roomNumber: Int = blair.address?.building?.room?.number {
print(roomNumber)
} else {
print("Can not find room number")
}
- 옵셔널 체이닝을 통해 여러 단계로 복잡하게 중첩된 옵셔널 프로퍼티나 메서드 등에 매번 nil 체크를 하지 않아도 손쉽게 접근할 수 있다
- 옵셔널 체이닝을 통해 값을 할당할 수도 있다.
blair.address?.building?.room?.number = 505
- 메서드도 옵셔널 체이닝을 통해 호출 가능
14.2 빠른 종료
- if 문과 유사하게 bool 타입의 값으로 동작하는 기능
- guard let 구문
- guard 뒤에 따라붙는 코드의 실행결과가 true 일때 코드가 계속 실행
- guard 구문은 항상 뒤에 else 가 따라와야 함
- guard 뒤의 bool 값이 false 라면 else 구문을 실행
- else에는 return, break, continue, throw 등의 제어문 전환 명령을 사용한다.
- fatalError와 같은 비반환 함수나 메서드를 호출할 수도 있다
- 예외 상황만 처리하고 싶다면 guard 구문을 사용하는 것이 간편
- 문법
guard Bool 타입 else {
예외사항 실행문
제어문 전환 명령어
}
- guard 구문과 옵셔널 바인딩
func greet(_ person: [String: String]) {
guard let name: String = person["name"] else {
return
}
print("Hello \\(name)!")
guard let location: String = person["location"] else {
print("I hope the weather is nice near you")
return
}
print("I hope the weather is nice in \\(location)")
}
var personInfo: [String: String] = [String: String]()
personInfo["name"] = "Jenny"
greet(personInfo)
personInfo["location"] = "Korea"
greet(personInfo)
- guard 구문에 구체적인 조건을 추가하고 싶다면 쉼표로 추가조건을 나열해준다.
- 이때 쉼표로 추가된 조건은 && 논리 연산과 같은 결과를 낸다
'QA Automation > swift5' 카테고리의 다른 글
15. 맵, 필터, 리듀스 (0) | 2023.06.21 |
---|---|
13. 클로저 (0) | 2023.06.21 |
12. 접근제어 (0) | 2023.06.21 |
11. 인스턴스 생성 및 소멸 (0) | 2023.06.21 |
10. 프로퍼티와 메소드 (0) | 2023.06.21 |