공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 옵셔널 체이닝과 nil 병합 연산자에 대해서 공부합니다.
- 옵셔널 체이닝
: 옵셔널 요소 내부의 프로퍼티로 또 옵셔널이 연속적으로 연결되는 경우에 유용하게 사용할 수 있습니다.
예제)
class Student{
var name : String
var school : School?
init ( name : String) {
self.name = name
}
}
class School {
var schoolName : String
var rank : String?
var grade : String?}
let altong : Teenagers? = Teenagers("박알통")
let tistorySchool : School? = MOrHSchool("경성고등학교")
* 옵셔널 체이닝의 결과 값은 nil 값이 나올 수도 있기 때문에 결과 타입도 옵셔널입니다.
위 두 클래스를 통해 예제를 보겠습니다.
예제) 학생이 있습니다.. 이 학생이 학교를 다니는지, 몇 학년인지, 몇 등을 하는지 궁금하다면?
func isStudent(altong : Student?) {
if let altong = altong { // 매개 변수로 입력된 값이 Teenagers 타입인지 확인합니다.
if let school = altong.school{ // 학교를 다니는지 확인합니다.
if let grade = school.grade { // 학년을 확인합니다.
if let rank = school.rank { // 등수를 확인합니다.
print("\(rank) 등 입니다")
}else {
print("학생이 아닙니다.")
}
}
}
}
}
위 함수는 조건문이 너무 많죠? 먼저 학생인지 확인하고 학교를 다니는지 확인하고, 학년을 확인하고, 등수를확인하고 ;; 옵셔널 체이닝을 사용하면 좀 더 간결한 문장으로 같은 조건을 검사할 수 있습니다.
func isStudentOptional(altong : Student?) {
if let rank = altong?.school?.grade?.rank {
print("\(rank) 등입니다.")
} else {
print("학생이 아닙니다")
}
}
isStudent(altong) // 학생이 아닙니다
altong?.school?.grade?.rank // nil
altong?.school = tistorySchool
altong?.school // Optional(School)
altong?.school?.grade // nil
altong?.school?.grade = "3학년"
altong?.school?.grade // Optional(String)
altong?.school?.grade?.rank // nil
altong?.school?.grade?.rank = "전교 3"
altong?.school?.grade?.rank // 전교3등입니다.
옵셔널 체이닝을 사용한다면 더 간단하게 표현이 가능합니다.
다음은 nil 병합 연산자에 대해 공부합니다.
var stu1 : String
물음표 2개 앞의 값이 nil일 경우 물음표 뒤의 값을 변수에 할당해주고,
nil이 아니라면 물음표 앞의 값을 할당해줍니다.
stu1 = altong?.school?.grade?.rank ?? "학생이 아닙니다."
print(stu1) // 전교3등입니다.
altong?.school?.grade?.rank = nil
print(stu1) // 학생이 아닙니다.
이상입니다. 이번 포스팅 내용은 조금 이해가 안 가는 부분이 있어서 추가적인 공부가 필요할 것 같습니다 ㅎㅎ 추가 공부 후 포스팅 내용이 수정될 수도 있습니다.
감사합니다.
다음 포스팅에서는 타입 캐스팅에 대해서 공부합니다~
'Swift3(스위프트3)' 카테고리의 다른 글
swift3 스위프트3 assert, guard (0) | 2017.07.11 |
---|---|
swift3 스위프트3 타입 캐스팅 : 업 캐스팅과 다운 캐스팅 (0) | 2017.07.10 |
swift3 스위프트3 인스턴스의 생성, 인스턴스 소멸 (0) | 2017.07.07 |
swift3 스위프트3 상속 (0) | 2017.07.07 |
swfit3 스위프트3 프로퍼티와 감시자 (0) | 2017.07.06 |