본문 바로가기

iOS

iOS_week4

if-else문

var x = 3
if x % 2 == 0 {
    print("짝수입니다") }
else{
    print("홀수입니다") }

Swift에서는 조건문에 괄호를 하지않아도 됨.

 

let weight = 60.0
let height = 170.0
let bmi = weight / (height*height*0.0001) // kg/m*m
var body = ""
if bmi >= 40 {
    body = "3단계 비만"
} else if bmi >= 30 && bmi < 40 {
    body = "2단계 비만"
} else if bmi >= 25 && bmi < 30 {
    body = "1단계 비만"
} else if bmi >= 18.5 && bmi < 25 {
    body = "정상"
} else {
    body = "저체중"
}
print("BMI:\(bmi), 판정:\(body)")

switch-case문

var value = 2
switch (value)
{
case 0:
    print("영")
case 1:
    print("일")
case 2:
    print("이")
case 3:
    print("삼")
default:
    print("4이상")
}

일반적인 switch-case문은 break를 명시해줘야 하지만, Swift에서는 break가 자동으로 삽입

 

var temperature = 60
switch (temperature)
{
case 0...49 where temperature % 2 == 0:
    print("Cold and even")
case 50...79 where temperature % 2 == 0:
    print("Warm and even")
case 80...110 where temperature % 2 == 0:
    print("Hot and even")
default:
    print("Temperature out of range or odd")
}

where절은 부가적인 조건을 추가하는 것.

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

// 짝수만 출력하기
for number in numbers where number % 2 == 0 {
    print(number)
} //gpt한테 물어본 where절 예제

for문 예제
for문에 사용한 where절

var value = 4
switch (value)
{
case 4:
print("4")
fallthrough
case 3:
print("3")
fallthrough
case 2:
print("2")
fallthrough
default:
print("1")
}

Swift는 일치하는 case문을 만나면 자동으로 빠져나옴, break문이 자동으로 포함.

case별로 빠져 나가지 않고 아래로 계속 내려가게 하려면 fallthrough 문 사용

언어별 switch-case문의 차이


method "함수"

optional과 guard문, 함수에서 대부분 시험문제 출제 ㅎ

online C compiler에서 확인 한 코드. parameter와 argument의 차이

함수를 호출할 때는 argument를 호출, 받아서 처리할 때는 parameter 사용.

Swift에서는 함수를 만들때 func로 시작

//간단한 함수정의
func sayHello() -> Void{//정의부분- 반환값이 없다면 "-> Void" 생략가능
    print("leeeeeee")
}
sayHello() //호출

//int add(int x, int y) { //C
//return(x+y);
//}
//add(10,20);

func add(x: Int,y: Int) -> Int{
    return x+y
}

add(x:66,y:99) //x는 argument label, 10이 argument
print(add(x: 100, y: 11))

func add(x: Int,y: Int) -> Int{
    return x+y
}
func sayHello() {
    print("Hello")
}
//add(x: 10,y: 20) x는 argument label, 10이 argument
//print(add(x: 10, y: 30))

var x=10
print(type(of: x))
print(type(of: add)) //argument 의 자료형을 ,로 구분하여 적고 -> 뒤에는 함수의 리턴형 자료형
print(type(of: sayHello)) // (): 빈 튜플, void형.

출력결과

함수의 자료형은 argument의 자료형과 함수의 리턴형으로 이루어짐. 그냥 Int 이렇게 쓰면 안된다.

Void형일 경우 ()로 표시

매개변수명 두개 작성이 가능함. 함수 호출할 때 사용하는 외부 매개변수명, 함수 정의 시 내부 매개변수명 사용

하나만 쓸 경우 외부 매개변수명이 생략된 것.

//func add(x: Int,y: Int) -> Int{ // 함수의 리턴형이 Int
//    return x+y
//}
//print(add(x: 10, y: 30))

func add(first x: String, second y: String) -> String{ // (String,Int) -> String으로 하니 오류 발생
    return x+y
}
print(add(first: "hi", second: " junyeong"))
print(type(of: add))

출력결과

//func add(x: Int,y: Int) -> Int{ // 추천
//    return x+y
//}
//print(add(x: 10, y: 30))

//func add(first x: Int, second y: Int) -> Int{ 
//    return x+y
//}
//print(add(first:10, second:20))

//func add(_ x: Int, _ y: Int) -> Int{ 
//    return x+y
//}
//print(add(10,  20))

func add(_ x: Int, with y: Int) -> Int{ //혼합한 방식, 가장 많이 사용
    return x+y
}
print(add(10, with:20))

print(type(of: add))

가독성을 높이기 위해 처음 변수는 외부 이름을 생략하고 두번째 변수부터 외부 이름을 사용함.

func add(x: Int,y: Int) -> Int{ // 추천
    print(#function) //add(x:y:) 함수명을 보기 위한 literal
    return x+y
}
print(add(x: 10, y: 30))

func add(first x: Int,second y: Int) -> Int{
    print(#function) //add(first:second:)
    return x+y
}
print(add(first: 10, second: 30))

func add(_ x: Int, _ y: Int) -> Int{
    print(#function) //add(_:_:)
    return x+y
}
print(add(10,20))

func add(_ x: Int, with y: Int) -> Int{
    print(#function) //add(_:with:)
    return x+y
}
print(add(10, with: 20))

//print(type(of: add))
//함수 이름이 add로 같아보여도 이름이 다름. 오류가 나지않고 실행이가능

출력결과

마지막 콜론 생략하지 않도록 주의.

콜론의 개수가 매개변수의 개수

함수예제-해당 함수를 보고 이름과 자료형 파악하기

함수이름 : tableView(_:numberOfRowsInSection:)

함수의 자료형: (UITableView,Int) -> Int

 

ChatGPT과제 - iOS 테이블뷰에서 많이 사용하는 메서드를 많이 사용하는 순서대로 나열하고 예를 들어 기능을 설명하고, 전체 메서드 이름과 메서드 자료형을 알려줘


guard문

var x = 1
while true {
guard x < 5 else { break }//조건(x<5)이 거짓일 때 실행(break)
print(x) //1 2 3 4, 조건(x<5)이 참일 때 실행
x = x + 1
} //조건을 반대로 줘야 if문과 결과가 같음 -> if문이 더 편해서 이렇게 사용하지 않음
var x = 1
while true {
if x > 4 { break } //조건이 참일때 실행, guard문은 다름
print(x) //1 2 3 4
x = x + 1
}

블록이 있는 경우만 guard문 사용.

func multiplyByTen(value: Int?) {
    guard let number = value else {//조건식이 거짓(nil)일 때 else 블록 실행
        print("nil")
        return
    }
    print(number*10) //조건식이 참일 때 실행, 주의 : number를 guard문 밖인 여기서도 사용 가능
}
multiplyByTen(value: 3) //30
multiplyByTen(value: nil)
multiplyByTen(value: 10) //100

지역변수인 number가 guard문 밖에서 쓰인다는 것이 말이 안되지만, Swift에서는 가능하다.

func printName(firstName: String, lastName: String?) {
    // if let
    if let lName = lastName { // lastName이 nil이 아니면
        print(lName, firstName)
    } else {
        print("성이 없네요!")
    }

    // guard let
    guard let lName = lastName else { // lastName이 nil이면
        print("성이 없네요!")
        return // early exit
    }
    print(lName, firstName)
}

printName(firstName: "길동", lastName: "홍")
printName(firstName: "길동", lastName: nil)

 

- guard는 return, break, continue, throw 등 제어문 전환 키워드를 쓸 수 있는 상황이라면 사용이 가능 

- 그래서 함수 뿐 아니라 반복문 등 특정 블록 내부에 있으면 사용 가능

- 함수 내부에 있다면 보통 return을 써서 해당 함수를 조기에 빠져나오는 조기 출구 용도로 사용 

- 실제 앱을 만들다 보면 옵셔널 바인딩 때문에 다중 if~else를 사용해야 하는데, guard~let을 사용하면 다중 루프 없는 훨씬 가독성이 좋은 코드가 가능해서 if~let보다 많이 사용


함수를 호출할 때 값을 지정하지 않으면, 함수를 정의할 때 미리 지정되어 있는 값을 씀 : default argument 라고 함.

ex) print 함수의 separator , terminator

import Foundation //format 사용하기 위해 Foundation 프레임워크 import
func sss(x : Int, y : Int) -> (sum : Int, sub : Int, div : Double)
{
    let sum = x+y
    let sub = x-y
    let div = Double(x)/Double(y) //같은 자료형만 연산 가능, Int형을 double로 둘 다 변경
    print(#function) // 함수 이름: sss(x:y:)
    return (sum, sub, div) //튜플로 리턴
} //2개의 정수를 입력받아 가감제 리턴
var result = sss(x:10,y:3)
print(type(of: sss)) // 함수의 자료형: (Int, Int) -> (sum: Int, sub: Int, div: Double)
print(String(format: "%.3f", result.div)) //세번째 자리에서 반올림
print(result.sum)
print(result.sub)
print(result.div)

 

4주차도 끝~~

'iOS' 카테고리의 다른 글

iOS_week6  (0) 2025.10.13
iOS_week5  (0) 2025.09.29
iOS_week_3  (0) 2025.09.15
iOS-week2  (0) 2025.09.08
iOS_week1  (0) 2025.09.02