개발/Mobile

[Swift] Swift 강의.06 - if, switch

hojak99 2018. 3. 12. 15:54

if, switch

이번엔 if, switch 문에 대해서 알아보겠다.
Swift 에서는 switch 문을 잘 활용하면 짧은코드로 파워풀하게 사용할 수 있기 때문에 switch문을 많이 사용할 것 같다.

if

if문은 간단하기 때문에 Swift 공식 문서에도 2페이지로 설명이 되어있다. if문은 쉽게 말하면 만약 ~ 하다면 해당 로직을 수행합니다 라고 생각하면 된다.

Swift 에선 Java, C 등과 같은 언어와 다르게 조건문에 소괄호가 존재하지 않는다. 유의하길 바란다.

let tempNumber = 10;
if tempNumber == 10 {
    print("방가방");       // 방가방
}

if tempNumber > 5 {
    print("귀엽귀");       // 귀엽귀
} else if tempNumber < 5 {
    print("tempNumber 는 5보다 작다");
}

if 문은 무척 간단하다.

switch

switch 문은 쉽게 말해서 조건에 따른 각각의 케이스들을 실행시킬 수 있다.
참고고 Swift 에서는 switch문에 break가 없는데, case 문에 있는 코드 마지막에 자동으로 break가 생긴다고 생각하면 된다.

보통 switch 문은 다음과 같이 사용한다.

 switch <some value to consider> {
     case <value 1> :
        <respond to value 1>
     case <value 2>, <value 3> : 
        <respond to value 2 or 3>
     default : 
        <otherwise, do something else>
 }

위와 같이 사용된다. 이제 예제를 보면서 switch 문을 어떻게 사용하는지 알아보도록 하자.

let someCharacter : Character = "z";

switch someCharacter {
    case "a" :
        print("the first letter of the alphabet");
    
    case "z" :
        print("the last letter of the alphabet");

    default : 
        print("Some other character");
} 
// "the last letter of the alphabet"

아래의 코드에선 케이스문의 조건을 여러개로 정할 수 있는 것을 보여준다. , 를 사용하면 된다.

let anotherCharacter : Character = "a";

switch anotherCharacter {
    case "a", "A" : 
        print("The letter A");
    default :
        print("Not the letter A");
}
// "The letter A"

아래와 같은 코드도 작성할 수 있다. Java, C 등과 같은 언어를 사용한 사람들에겐 익숙치 않은 문법일 수도 있다.

let approximateCount = 49;
let countedThings = "moons orbiting Saturn";
let naturalCount : String;

switch approximateCount {
    case 0 :
        naturalCount = "no";
    
    case 1..<5 :
        naturalCount = "a few";

    case 5..<12 :
        naturalCount = "several";

    case 12..<100 :
        naturalCount = "dozens of";

    case 100..<1000 :
        naturalCount = "hundreds of";

    default : 
        naturalCount = "many";
}
print ("There are \(naturalCount) \(countedThings).");
// "There are dozens of moons orbiting Saturn"

아래와 같은 코드도 작성할 수 있다. 여기서 _는 아무 데이터가 들어와도 된다는 뜻이다.

// 튜플
let somePoint = (1, 1);

switch somePoint {
    
    case (0, 0) :
        print("\(somePoint) is at the origin");

    // 여기서 _ 바는 아무 데이터여도 상관없다는 뜻이다.
    case (_, 0) :
        print("\(somePoint) is on the x-axis");

    case (0, _) :
        print("\(somePoint) is on the y-axis");

    // 각각 -2 보다 크고 2보다 작은 숫자가 오면 된다는 뜻이다.
    case (-2...2, -2...2) : 
        print("\(somePoint) is inside the box");

    default:
        print("\(somePoint) is outside of the box")
}

// (1, 1) is inside the box

아래의 코드는 각각 조건문에 있는 let형 x 상수와 y 상수에 해당 튜플의 값이 들어간다.

let antherPoint = (2, 0);

switch antherPoint {
    case(let x, 0) :
        print("on the x-axis with an x value of \(x)");

    case(0, let y) :
        print("on the y-axis with an y value of \(y)");
    
    case let(x, y) :
        print("somewhere else at \(x), \(y)");
}
// on the x-aixs with an x value of 2
let yetAnotherPoint(1, -1);

switch yetAnotherPoint {
    case let(x, y) where x == y:
        print("\(x), \(y) is on the line x == y");

    case let(x, y) where x == -y :
        print("\(x), \(y) is on the line x == -y");

    case let(x, y):
        print("\(x), \(y) is just some arbitrary point");
}

// 1, -1 is on the line x == -y

다음 코드를 만약 if 문으로 해결하려 했으면 무척이나 긴 코드가 필요했을 것이다.

let someCharacter : Character = "e";

switch someCharacter {
    case "a", "e", "i" :
        print("첫번째 케이스");

    case "b", "c", "d" :
        print("두번째 케이스");
    
    default : 
        print("디폴트");
}

// 첫번째 케이스





if, switch

//: Playground - noun: a place where people can play
import UIKit

let number = 5;

if number > 10 {
    print("number > 10");
} else if number >= 5 && number < 10 {
    print("5 <= number < 10");
}


// default 는 항상 switch문에서 존재해야한다.
switch number {
case 0:
    print("0");
case 1:
    print("1");
case 2, 3 :
    print("2, 3");
case 3...10 :
    print("3 < number <= 10");
default:
    print("default");
}


반응형