Swift문법 - (3)조건문

Youth·2022년 9월 16일
0

swift문법공부

목록 보기
3/27
post-thumbnail
post-custom-banner

조건문

  • 참(true)또는 거짓(false)의 특정 조건에 따라 특정 코드만 실행하게 할 수 있는 문장
  • 분기 : 선택적으로 코드를 실행시키는 것

“조건”의 자리에는 결과가 참 또는 거짓이 나와야함

if "조건" {
    "조건"이 참일때 실행할 문장
} else {
    "조건"이 참이 아닐때 실행할 문장
}

if number <= 10 {
    print("참입니다)
}

1) if문에서 논리적인 구조 및 조건의 순서가 중요

아래 코드는 잘못된 문장이다, 만약에 8을 넣으면 결과가 "0또는 양수입니다."가 출력된다. 즉, 첫번째 조건이 만족하는 순간 문장을 실행하고 조건문을 빠져나가기때문에 아래문장을 거치지 않는다

var num = -7


if num >= 0 {
    print("0 또는 양수입니다.")
} else if num % 2 == 0 {
    print("양의 짝수입니다.")
} else if num % 2 == 1 {
    print("양의 홀수입니다.")
} else {
    print("음수입니다.")
}
//결과 : "음수입니다."
//-7을 2로 나눈 나머지는 -1이 나오는데 나머지가 음수면 짝수나 홀수를 판단 할 수가 없게된다

올바르게 수정해본다면 아래처럼 수정할 수 있다.

if num >= 0 {
    print("0 또는 양수입니다.")
    
    if num % 2 == 0 {
        print("짝수입니다.")
    } else if num % 2 == 1 {
        print("홀수입니다.")
    }
    
} else {
    print("음수입니다.")
}

아래코드는 잘못된 문자이다. 범위가 큰 문장이 먼저 왔기때문에 조건이 잘 적용되지 않는다

70점 이상은 범위가 넓기때문에 70점 이상인 점수들중에 80점이상인지 90점이상인지를 판별하지 못한다

var score = 100


if score >= 70 {
    print("70점이상입니다.")
} else if score >= 80 {
    print("80점이상입니다.")
} else if score >= 90 {
    print("90점이상입니다.")
} else {
    print("70점미만입니다.")
}

올바르게 수정해본다면 아래처럼 수정할 수 있다

if score >= 90 {                // 범위가 작은 조건이 먼저 와야함
    print("90점이상입니다.")
} else if score >= 80 {
    print("80점이상입니다.")
} else if score >= 70 {
    print("70점이상입니다.")
} else {
    print("70점미만입니다.")
}

2)조건을 &&(and), 또는 ||(or)로 연결하는 것도 가능

var email = "a@gmail.com"
var password = "1234"

if email == "a@gmail.com" && password == "1234" {
    print("메인페이지로 이동")
}

if email != "a@gmail.com" || password != "1234" {
    print("경고메세지 띄우기")
    print("이메일주소 또는 패스워드가 올바르지 않습니다.")
}

if조건문 활용 예시

// 사용자의 아이디가 일치하고, 비밀번호도 일치 한다면
// 입력된 아이디의 글자수가 6자리 이상이라면

if id.count >= 6 {
    print("아이디가 6글자 이상이네요. 다음 화면으로 넘어가겠습니다.")
}

// 가위 / 바위 / 보
var choice = 1    // 0: 가위, 1: 바위, 2: 보

if choice == 0 {
    print("가위입니다.")
} else if choice == 1 {
    print("바위입니다")
} else if choice == 2 {
    print("보입니다.")
}

switch 조건문

  • if문 보다 한정적인 상황에서 사용
  • 조건을 부등식이 아닌 “==”와만 비교
  • 변수가 어떤 값을 가지느냐에 따라 실행문을 선택하고 진행
switch choice {                   // 변수(표현식)
case "가위", "바위":                // "가위" == "가위", ","의 경우엔 ||(or)연산자
    print("가위 또는 바위 입니다.")
case "안녕":                       // if "안녕" == choice
    print("안녕 입니다.")
case "보":                         // if "보" == chice
    print("보 입니다.")
default:
    break
}

[스위치문의 특징]

  • 스위치문에서 케이스의 ,(콤마)는 또는의 의미로 하나의 케이스에 여러 매칭값을 넣을 수 있음
  • switch 문은 (비교하고 있는)값의 가능한 모든 경우의 수를 반드시 다루어야 함 (exhaustive: 하나도 빠뜨리는 것 없이 철저한) 모든 사례를 다루지 않았을 때에는 디폴트 케이스가 반드시 있어야 한다.
  • 각 케이스에는 문장이 최소 하나 이상 있어야 하며 만약 없다면 컴파일 에러 발생(의도하지 않은 실수를 방지 목적) 실행하지 않으려면, break를 반드시 입력해야함 (if문에서는 실행문을 입력안해도 괜찮지만, 스위치문에서는 필요함)

fallthrough 키워드의 사용

var num1 = 10

switch num1 {
case ..<10:
    print("1")        // 매칭된 값에 대한 고려없이 무조건 다음블럭을 실행함
    fallthrough
case 10:
    print("2")
    fallthrough
default:
    print("3")
}
//결과값 : 1 2 3

switch문의 범위 매칭 - 패턴 매칭 연산자와 관련

⭐️ 범위연산자, 패턴매칭 연산자 (참과 거짓의 결과가 나옴)

0...50 ~= num       //num이 0이상 50이하 인지아닌지
51...100 ~= num     //num이 51이상 100이하 인지아닌지

switch문은 비교연산자를 사용할 수 없다, 아래와 같은 코드는 오류를 발생시킴

switch temperature {
case  < 0 :                        //이런식으로 작성하면 안된다. ==>   ..<0
    print("영하 - 0미만")
case >= 0 && <= 18 :               //이런식으로 작성하면 안된다. ==>   0...
    print("0이상 무덥지 않은 날씨")
default :
    break
}

올바른 케이스

var num = 30

switch num {
case 0...50:                     // 0...50 ~= 30 
    print("숫자의 범위: 0 ~ 50")
case 51...100:                   // 51...100 ~= 30
    print("숫자의 범위: 51 ~ 100")
default:
    print("그 외의 범위")
}

var temperature = -100

switch temperature {
case ..<0:
    print("영하 - 0도 미만")
case 0...18:
    print("0도 이상 무덥지 않은 날씨")
case 19...:
    print("여름 날씨")
default:
    break
}

switch문의 활용

  • switch문과 밸류바인딩(Value Binding)

바인딩 : 다른 새로운 변수/상수 식별자로 할당

// 바인딩의 일반적인 의미
var a = 7
let b = a     // 바인딩을 한다. (다른 변수/상수의 새로운 식별자로 할당한다.)

스위치문에서의 바인딩

var num = 6

switch num {
case let a:               // ⭐️let a = num
    print("숫자: \(a)")
default:
    break
}

스위치문과 where절 (스위치문에서 조건을 확인하는 방식)

// 일단 다른 상수 값에 바인딩한(넣은) 후, 조건절(참/거짓 문장)을 통해 다시 한번 더 조건 확인
// (바인딩 된 상수는 케이스블럭 내부에서만 사용가능하고, 상수 바인딩은 주로 where절하고 같이 사용됨)

num = 7

switch num {
case let x where x % 2 == 0:      // let x = num, 만약 x를 2로나눈 나머지가 0(짝수)라면
    print("짝수 숫자: \(x)")
case let x where x % 2 != 0:
    print("홀수 숫자: \(x)")
default:
    break
}

switch num {
case let n where n <= 7:         // let n = num
   print("7이하의 숫자: \(n)")
default:
   print("그 이외의 숫자")
}

switch num {
case var x where x > 5:       // 변수로 바인딩도 가능 var x = num
    x = 7
    print(x)
default:
    print(num)
}

switch문 간단 정리

**switch문에서 특정 값을 비교할때**
switch num {
case 1 :          // 1 == num 인지를 물어봄
    print("안녕")
}

**switch문에서 특정 범위를 비교할때**
switch num {
case 0.. :        // 0..(0이상) ~= num 인지를 물어봄
    print("안녕")
}

**switch문에서 특정 조건을 비교할때**
switch num {
case let a where a % 2 == 0 :   //let a = num을 하고 a를 2로 나눈 나머지가 0인지를 물어봄
    print("안녕")
}
profile
AppleDeveloperAcademy@POSTECH 1기 수료, SOPT 32기 iOS파트 수료
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 3월 16일

👍

답글 달기