본문 바로가기

IT/Swift

[swift] guard

[swift 기초문법] - guard, 빠른종료 (early return)

guard문이란

guard 문은 뭔가를 검사하여 그 다음에 오는 코드들을 실행할지 말지 결정하는것, guard 문에 주어진 조건문이 거짓일 때, 여기에 달려 있는 코드블럭이 실행됩니다.

조건식에 이 함수가 수행하는데 필요한 조건을 그대로 나타낸다는 점에서 if문에서 부정적인 조건식으로 표현하는것보다 가독성이 높은 장점 있습니다.

if 문과 다르게 else를 항상 달아야 합니다.

아래 함수는 nil 입력을 가드함. 만일 입력이 nil이면 guard문은 else 절을 수행하고 다른 구문이 수행되기 전에 함수를 return함

 

func guardInFunc (string: String?) {

    guard string != nil else { return }

    print(string!, "second param", separator: "")

}

guardInFunc("test")

guardInFunc(nil)

 

 

 

 

 

옵셔널 바인딩이란(Optional Binding)

옵셔널 바인딩은 if-let 문법을 사용한 옵셔널 바인딩과 다르게 옵셔널 바인딩된 상수를 조건문 범위 바깥에서도 사용할 수 있습니다. guard문의 경우 상수의 사용범위는 함수 나머지 영역이 됩니다.

 

func guardInFunc (string: String?) {

    guard let letString = string else { return }

    print(letString!, "second param", separator: "")

}

guardInFunc("test")

 

 

 

복합 옵셔널 바인딩

복합해서 옵셔널 바인딩을 사용할 수 있음. 모든 파라미터가 nil이 아닐경우 조건을 충족하고 출력문을 수행함.

 

func guardWithCompoundOptionalBinding (firstName: String?, lastName: String?, dateOfBirth: String?) {

    guard let fname = firstName, let lname = lastName, let dob = dateOfBirth else { return }

    print("\(fname) \(lname) \(dob)")

}

guardWithCompoundOptionalBinding("sun", lastName : "kim", dateOfBirth: "")

 

 

 

 

제어흐름 이동

루프의 경우 continue와 break를 사용할 수 있으며, 또한 우리는 error를 throw 할 수 있음. (else close : return, break continue, throw)

 

func guardTransFerringControl () {

    var strings: Array<String> = ["safe", "Coding", "Why", "using"]

     

    for string in strings {

        guard string != "Why" else {

            continue

        }

        print("string")

    }

    guard let fname = firstName, let lname = lastName, let dob = dateOfBirth else { return }

    print("\(fname) \(lname) \(dob)")

}

 

guardTransFerringControl()

 

 

 

여러 조건의 Guard

Guard 문은 쉼표 (,)로 구분 된 여러 조건을 다음과 같이 연결할 수도 있습니다.

 

func changeOptionalStringToUpperCase() {

    var name:String? = ""

    guard let temp = name , temp.count > 0  else {

        print("Name is nil or an empty string. Cannot process")

        return

    }

    print("Uppercased:\(temp.uppercased())")

}

 

빠른종료 (early return)

 

 

 

 

#swift 기초

#swift 강의

#ios programming

'IT > Swift' 카테고리의 다른 글

[swift] Architecture mvc/mvp/mvvm/viper/vip 비교  (0) 2019.08.21
[swift] swift5  (0) 2019.08.21
[swift] Protocol  (0) 2019.08.21
[swift] try? try! try  (0) 2019.08.21
[swift] 스위프트의 특징  (0) 2019.08.21