반응형
** edwith - Swift 프로그래밍 입문 강의 참고 **
assert
- assert(_:_:file:line:) 함수 사용
- 디버깅 모드에서만 동작 (실제 배포 환경에서는 동작 X)
- 예상했던 조건의 검증을 위해 사용
- 디버깅 모드에서 assert() 등을 통해 애플리케이션이 죽으면, 죽은 위치가 확실하게 보여집니다. 이를 통해 버그를 방지하거나 디버그에 유용한 정보로 사용할 수 있습니다.
var someInt: Int = 0
// 검증 조건과, 검증 실패시 나타날 문구 작성 //
assert(someInt == 0, "someInt != 0")
someInt = 1
assert(someInt == 0) // 동작 중지, 검증 실패
assert(someInt == 0, "someInt != 0") // 동작 중지, 검증 실패
func fwa(age: Int?) {
assert(age != nil, "age == nil")
assert((age! >= 0) && (age! <= 130), "무슨 나이가 이래요")
print("당신의 나이는 \(age!)세 입니다.")
}
fwa(age: 50) // 출력 : 당신의 나이는 50세 입니다.
fwa(age: -1) // 동작 중지, 검증 실패
fwa(age: nil) // 동작 중지, 검증 실패
precondition
- precondition(_:_:file:line:) 함수 사용
- 실제 배포 환경에서도 동작
- 예상했던 조건의 검증을 위해 사용
- 실제 배포 환경에서도 동작한다는 것만 제외하면 assert와 동일
guard
- 빠른 종료(Early Exit)
- guard 사용 -> 잘못된 값의 전달 시 특정 실행구문을 빠르게 종료
- 디버깅 모드 뿐만 아니라 어떤 조건에서도 동작
- guard의 else 블럭 내부에는 특정 코드블럭을 종료하는 지시어(return, break 등)가 꼭 필요
- 타입 캐스팅, 옵셔널과도 자주 사용됨
func fwg(age: Int?) {
guard let uwAge = age,
uwAge<130, uwAge >= 0 else {
print("나이 입력 오류")
return
}
print("당신의 나이는 \(uwAge)세 입니다")
}
var count = 1
while true {
guard count<3 else {
break
}
print(count)
count++
}
/* 출력
1
2
*/
func sf(info: [String: Any]) {
// <1>
guard let name = info["name"] as? String else {
return
}
// <2>
guard let age = info["age"] as? Int,
age >= 0 else {
return
}
print("\(name): \(age)")
}
sf(info: ["name": "aa", "age": "10"]) // <2> 때문에 return되서 출력 X
sf(info: ["name": "bb"]) // <2> 때문에 return되서 출력 X
sf(info: ["name": "hb", "age": 24]) // (출력) hb: 24
if let 과 guard의 차이
/* if let 옵셔널 바인딩 */
if let uw: Int = someValue {
// do something
uw = 3
}
// if 구문 외부에서 uw사용 불가능
/* guard 옵셔널 바인딩 */
guard let uw: Int = someValue else {
return
}
uw = 3
// guard 구문 외부에서 uw사용 가능
반응형
'iOS > Swift' 카테고리의 다른 글
Swift-10. 오류 처리 - throw, rethrows, defer (0) | 2023.02.24 |
---|---|
Swift-9. 프로토콜(protocol), 익스텐션(extension) (0) | 2023.02.24 |
Swift-6. 옵셔널 체이닝, nil 병합 (0) | 2023.02.24 |
Swift-5. 인스턴스 생성 및 소멸 (0) | 2023.02.24 |
Swift-4. 클로저, 프로퍼티 (0) | 2023.02.24 |
댓글