제어문이 크게 차이는 없지만 생소하기는 하니 플레이 그라운드를 한 번 실행해서 한 번씩 적어본다.



1. for 문


for var i=0; i<10; i++ {

    print("value of i is \(i)");

}


for index in 1...10 {

    print("index is \(index)")

}


이런 형태를 for-in 문이라고 한다. 어레이 형태의 데이터 셋에서 하나씩 비교하여 값을 읽어들일 수 있다.


var count = 0;

for _ in 1...10 {

    count++;

}


언더바(_)는 반복문에서 참조 변수가 필요하지 않을 경우 넣을 수 있다.



2. while 문


var cnt = 0;

while cnt < 100 {

    ++cnt;

}



3. repeat-while 문


var i = 10;

repeat {

    --i;

}

while (i>0)


응? do-while 문이 안보이네...플레이 그라운드에서 자동으로 repeat-while 문으로 변경된다.


반복문의 제어를 위해서 break와 continue 도 동일하게 적용된다.



4. if 문


var a = 10;

if a>9 {

    print("9보다 크다.")

}


if-else 문은 다음과 같이 사용할 수 있다.

if a<=9 {

    print("9보다 작거나 같다.")

}

else if a>10 {

    print("9보다 크다.")

}


API를 체크하는 기본적인 기능이 담겨 있다. 
특정 API를 체크해서 실행이 필요한 경우가 있는데, 다음과 같이 사용한다. 

if #available(iOS 9, OSX 10.10, *) {

    // Use iOS 9 APIs on iOS, and use OS X v10.10 APIs on OS X

} else {

    // Fall back to earlier iOS and OS X APIs

}



5. switch 문

var j = 10

switch (j) {

    case 10:

        print("값은 10");

    case 20:

        print("값은 20");

    default:

        print("10 20 아니다.");

}


일반적인 스위치문은 동일하다. 다음처럼 범위를 지정할수도 있다.

var j = 10

switch (j) {

case 1...10:

    print("값은 1부터 10 사이");

case 11...20:

    print("값은 11부터 20 사이");

default:

    print("1부터 20 사이의 값이 없다.");

}


범위 설정과 where 문 사용으로 좀 더 유연하게 설정할 수 있다.

switch (j) {

case 1...10 where j%2 == 0:

    print("값은 1부터 10 사이의 짝수");

case 11...20 where j%2 == 0:

    print("값은 11부터 20 사이의 짝수");

default:

    print("1부터 20 사이의 값이 없다.");

}


눈치 챘겠지만 break 문이 없다. 그냥 해당 조건을 만나면 케이스문을 실행하고 스위치 문을 종료한다.
이 break 문을 없앤 일반 스위치문과 동일하게 구현하려면 fallthrough 문을 넣어준다.

switch (j) {

case 1...10 where j%2 == 0:

    print("값은 1부터 10 사이의 짝수")

    fallthrough

case 11...20 where j%2 == 0:

    print("값은 11부터 20 사이의 짝수")

    fallthrough

default:

    break    

}


튜플 데이터를 통해서 스위치문을 비교할 수도 있다.


let somePoint = (1, 1)

switch somePoint {

case (0, 0):

    print("(0, 0) is at the origin")

case (_, 0):

    print("(\(somePoint.0), 0) is on the x-axis")

case (0, _):

    print("(0, \(somePoint.1)) is on the y-axis")

case (-2...2, -2...2):

    print("(\(somePoint.0), \(somePoint.1)) is inside the box")

default:

    print("(\(somePoint.0), \(somePoint.1)) is outside of the box")

}


이렇게 임시 변수에 데이터를 바인딩하여 처리할 수도 있다.


let anotherPoint = (2, 0)

switch anotherPoint {

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 a y value of \(y)")

case let (x, y):

    print("somewhere else at (\(x), \(y))")

}

// prints "on the x-axis with an x value of 2"




그냥 입력하다보니 세미콜론을 찍었다가 안찍었다가 했네...그런데, 에러 메시지가 없이 실행된다.

넣어도 되고 않넣어도 되나보다.



+ Recent posts