Guard 알아보기
Swift에서 {if let 변수명} 은 Objective C 에서는 느껴보지 못한 확인 절차가 너무 좋았던 점 중에 하나이다. 이런 확인절차에 사용할 수 있는 Guard 를 알아보려고한다.
if let
해당 코드가 맞다면, if {내부에 정상적인 코드 작성}guard
해당코드가 아닌 경우 else{예외처리} 밖에서 변수 사용가능guard 처리로 예외체크할 시에 라인이 깔끔하다는 점과 변수를 밖에서도 사용할 수 있다는 장점이 있다. 좀더 많은 예외처리항목과 그 변수값으로 다른 예외처리 체크까지 할 때 편리하게 사용할 수 있다.
import UIKit
//1. Guard 를 if let 과 비교하기
// if let 옵셔널 활용시
func ifMyName(name:String?) -> String {
if "soo" == name {
return "당신의 이름은 [X] 입니다."
}
else if let resultName = name {
return "당신의 이름은 \(resultName)입니다."
}
else {
return "당신의 이름은 [X] 입니다."
}
}
// guard 옵셔널 활용시
func guardMyName(name:String?) -> String {
guard let resultName = name, name != "soo" else {
return "당신의 이름은 [X] 입니다."
}
return "당신의 이름은 \(resultName)입니다."
}
// 호출
print(ifMyName(name: nil)) // 당신의 이름은 [X] 입니다.
print(ifMyName(name: "soo")) // 당신의 이름은 [X] 입니다.
print(ifMyName(name: "Jiwook")) // 당신의 이름은 Jiwook입니다.
print(guardMyName(name: nil)) // 당신의 이름은 [X] 입니다.
print(guardMyName(name: "soo")) // 당신의 이름은 [X] 입니다.
print(guardMyName(name: "Jiwook")) // 당신의 이름은 Jiwook입니다.
// 2. Guard where 사용하기(where 가 안되서 ,로 사용해 봄.
func confirmDocumentPath(pathObject: AnyObject) -> Bool {
guard let url = pathObject as? NSURL,
let components = url.pathComponents, components.count > 0,
let first = components.dropFirst().first , first == "Applications",
let last = components.last , last == "Document"
else { return false }
print("valid folder", last)
return true
}
let path1 = NSURL(fileURLWithPath: "/Applications/Document")
let path2 = NSURL(fileURLWithPath: "/Applications/Temp")
if confirmDocumentPath(pathObject: path1) {
print("Applications 에 Document 폴더입니다.") // path1 일때
} else {
print("Applications 에 Document XXXXX") // path2 일때
}
| cs |
댓글
댓글 쓰기