[Swift 공부] Guard 알아보기.

  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

댓글