VesselWheel

Guard 문의 개념 본문

Xcode Study

Guard 문의 개념

JasonYang 2023. 4. 30. 10:51

import UIKit

 

/*

 guard 문

    

     guard 조건문 else{

         명령문

     }

     guard (Optional Binding) else{

         명령문

     }

 

 */

 

// 문자열을 parameter 로 받아서

// Bool type 의 값을 return 하는 함수

func validate(id: String?) -> Bool{

    // parameter 로 전달된 문자열에

    // 실제로 문자열이 할당되어 있는지 확인함

    guard let id = id else {

        print("guard let id = id else")

        return false

    }

    // parameter 로 들어온 문자열의 길이가

    // 6 보다 크거나 같으면 true 가 되어서

    // guard 문 이외의 code 가 실행됨

    guard id.count >= 6 else{

        print("guard id.count >= 6 else")

        return false

    }

    return true

}

func validate2(id: String?) -> Bool{

    // 두 개의 guard 문을 하나로 작성하기

    guard let id = id, id.count >= 6 else{

        return false

    }

    return true

}

 

// validate () 호출하기

// parameter 로 nil 을 전달함

// nil : 전달된 문자열이 없음

print(validate(id: nil))

print(validate2(id: nil))

print("--------------------")

print(validate(id: "swift"))

print(validate(id: "tjoeun academy"))

 

 

func validateUsingIf(){

    var id: String? = nil

    

    // 외부 if 문 : 실제 문자열이 할당되어 있는지 확인

    // let str1 = id <- 문자열이 저장되어 있으면

    //                  해당 문자열을 str1 에 할당

    if let str1 = id{

        // 내부 if : 문자열의 길이가 6 이상인지 확인

        if str1.count >= 6{

            print(str1)

        }

    }

}

func validateUsingGuard(){

    var id: String? = nil

    // guard 문에서는 조건이 false 인 경우

    // return 문을 사용해야 함

    // let str1 = id <- 문자열이 저장되어 있으면

    //                  해당 문자열을 str1 에 할당

    guard let str1 = id else {

        // print(str1)

        // str1 은 이 scope에서 사용할 수 없음

        // let str1 = id <-- 동작하지 않을 때만

        //        이 scope 로 들어오게 됨

        return

    }

    // str1 은 이 scope에서 사용할 수 있음

    print(str1)

    guard str1.count >= 6 else {

        // str1 은 이 scope에서 사용할 수 있음

        print(str1)

        return

    }

    print(str1)

}