swift 2(연산자, 흐름제어)

2 분 소요

2020.03.18

‘야곰. 스위프트 프로그래밍 3판. 한빛미디어’를 바탕으로 작성되었습니다.

5장 연산자

기본 연산자

스위프트의 경우 coercion이 되지 않기 때문에 다른 타입끼리 연산을 하고 싶다면 casting을 하고 연산해야 합니다.

  • A ~= B : A와 B의 패턴이 매치되는지 검사
  • A…B : A이상 B이하
  • A..<B : A이상 B미만
  • A… : A 이상
  • …A : A 이하
let num: Int = 15;
if(0..<30 ~= num){
    print("10 <= \(num) < 30");
}
  • A ?? B : A가 nil이 아니면 A, nil이면 B를 return (nil check할 때 유용할 듯)
  • O! : O(옵셔널 개체)의 값을 강제로 추출
  • V? : V(옵셔널 값)를 안전하게 추출하거나, V(데이터 타입)가 옵셔널임을 표현

사용자 정의 연산자

7 ~ 10장을 읽고 다시 작성하도록 하겠습니다.

6장 흐름 제어

if-else

조건값이 무조건 Bool 타입이어야 합니다.

let first: Int = 5;
let second: Int = 7;

if (first > second) {
    print("first > second");
} else if first == second {     // 조건식은 ()를 생략할 수 있습니다.
    print("first == second");
} else {
    print("first < second");
}

switch

  • break 구문을 생략해도 정상적으로 해당 case문에서 탈출합니다.
  • case를 연속 실행하려면 “fallthrough” 키워드를 사용합니다.
  • C 언어와는 다르게 switch 조건 안에는 다양한 값이 들어갈 수 있습니다.
  • case 비교 값에는 범위 연산자, where 절도 사용할 수 있습니다.
let num: Int = 5;

switch (num) {
case 0:
    print("num == 0");
case 1...10:                        // 범위 연산자 사용
    print("0 <= \(num) <= 10");
    fallthrough;                    // fallthrough으로 인해 밑에 있는 case까지 실행
case Int.min..<0, 101..<Int.max:
    print("\(num) < 0 or \(num) > 100");
    break;
default:
    print("10 < \(num) <= 100");
}
let myTuple: (key: String, value: Int) = ("key", 1995);

switch (myTuple) {
case ("key", 1000):
    print("key, value correct");
case ("key", _):            // 와일드카드 식별자 사용
    print("key correct. value = \(myTuple.value)");
case (let key, 1995):       // 값 바인딩
    print("value correct. key = \(key)");
default:
    print("wrong");
}
  • 열거형에 대해서도 switch문을 사용할 수 있습니다.
enum Job {
    case programmer
    case doctor
}

let myJob: Job = .programmer;
switch myJob{
case .programmer:
    print("My job is programmer");
case .doctor:
    print("My job is doctor");
@unknown case _:                // switch문이 모든 case에 대응하지 않을 때 경고를 줍니다. 
    print("My job is \(myJob)");
}

for-in

C 언어에서 자주 사용하던 for(… ; … ; …) 는 사용할 수 없습니다.

let tup: [String: Int] = ["str1": 1, "str2": 2, "str3": 3];

for i in tup{
    print(i);
}

// (key: "str1", value: 1)
// (key: "str2", value: 2)
// (key: "str3", value: 3)

for i in 0...4{
    print(i);
}

while

다른 프로그램 언어와 거의 동일합니다.

repeat-while

C 언어의 do-while문과 같은 기능을 합니다.

카테고리:

업데이트:

댓글남기기