스위프트 문법 - 흐름 제어

응애개발자·2023년 1월 30일
0

스위프트

목록 보기
5/8

반복문

for문

횟수에 의한 반복문

for 루프 상수 in 순회 대상 {
	실행문
}

루프 상수에는 임의의 변수명이 들어옵니다.
순회 대상에는 1 ... 5 같은 단순히 범위 데이터를 넣을 수 있고
문자열, 배열, 집합, 딕셔너리, 집합도 들어올 수 있습니다.

while문

조건에 의한 반복문

while 조건식 {
	실행문
}

조건식이 맞으면 실행되고 맞지 않으면 한번도 실행되지 않습니다.

다른 언어에서의 do ~ while문이 스위프트에서는 repeat ~ while문으로 씁니다.

repeat {
	실행문
}
while 조건식

당연히 실행문이 처음 한번은 무조건 실행되고 그 다음회부터 조건식을 체크합니다.

조건문

if문

if 조건식 {
	실행문
}

조건식이 참이면 실행, 거짓이면 실행하지 않습니다.

if ~ else문

if 조건식 {
	조건이 참일 경우 실행문
} else {
	조건이 거짓일 경우 실행문
}

조건식을 기준으로 참일 경우와 거짓일 경우의 실행문을 다르게 작성합니다.
단순히 if문을 여러개 쓴 것과의 차이점은 if문을 여러개 쓰면 앞선 if문의 조건이 거짓이어도 뒤의 모든 if문의 조건식을 체크합니다. 하지만 if ~ else문은 조건식이 참이면 앞의 실행문만 실행하고 뒤의 내용은 건너뜁니다.

if ~ else if문

if 조건식1 {
	조건식1이 참일 경우 실행문
} else if 조건식2 {
	조건식2가 참일 경우 실행문
} else {
	모든 조건이 거짓일 경우 실행문
}

조건식을 여러개 두고 각 조건식마다 실행문이 각자 있고 모두 거짓일 경우의 실행문도 있습니다.

guard문

guard 조건식 또는 표현식 else {
	조건식 또는 표현식이 거짓일 경우 실행문
}

guard 구문은 전체구문의 조기종료를 체크하기 위한 목적으로 만들어졌습니다. 다시 말해 특정 조건을 만족하지 않은채로 실행되면 심각한 오류가 발생될 경우를 조기에 막기 위함입니다.

#available문

OS버전별로 지원하는 API가 달라지기 때문에 이때 발생하는 오류를 막기 위해 사용합니다.
guard문이나 if문과 함께 씁니다.

if #available (플랫폼 버전, 플랫폼 버전, *){
	해당버전에서 사용할 수 있는 API구문
} else {
	불가능할 경우의 실행문
}

쓰일 수 있는 플랫폼 버전은 네가지입니다.

  • 아이폰, 아이패드에 쓰이는 iOS, iPadOS
  • 맥 컴퓨터에 쓰이는 macOS
  • 애플 워치에 사용되는 watchOS
  • 애플 TV에 사용되는 tvOS

이들의 버전을 각각 입력합니다.

switch문

조건 비교시에 if ~ else if로도 좀 부족하다 싶을때 씁니다.

switch 비교 대상 {
	case 비교 패턴1 :
    	비교 패턴1에 걸리면 실행될 실행문
    case 비교 패턴2 :
    	비교 패턴2에 걸리면 실행될 실행문
	default :
    	아무것도 걸리지 않으면 실행될 실행문
}

비교패턴에 한가지씩만 쓰는게 아니라 여러가지를 써도 됩니다.

스위프트의 switch문에서는 다른 언어와는 한가지 큰 차이점이 있습니다. 바로 case문에 break가 없습니다.
break를 안써도 됩니다.

또한 다른 언어에서는 case문의 실행문에 아무것도 쓰지않고 다음 case문과 붙여쓰는 암묵적 fallthrough라는게 있지만 스위프트는 명시적으로 fallthrough라고 적어주어야 됩니다.

switch 비교 대상 {
	case 비교 패턴1 :
    	fallthrough // 이렇게 쓰면 비교 패턴 1에서 걸리면 바로 비교 패턴2의 실행문으로 넘어옵니다.
    case 비교 패턴2 :
    	비교 패턴1, 2에 걸리면 실행될 실행문
	default :
    	아무것도 걸리지 않으면 실행될 실행문
}

비교대상에는 튜플이 들어와도 되고 범위 데이터를 쓸수도 있습니다.

var value = (3, 4)

switch 비교 대상 {
	case let (x, 1...5) : // 이런식으로 둘다 합쳐서 쓸수도 있습니다.
    	print("튜플의 두번째 값이 1과 5사이일때 첫번째 값은 \(x)입니다.")
    case 비교 패턴2 :
    	비교 패턴2에 걸리면 실행될 실행문
	default :
    	아무것도 걸리지 않으면 실행될 실행문
}

제어 전달문

break와 continue

for i in 1...5 {
	
    if (i == 1) {
    	continue
    } else if (i == 4){
    	break
    }
    print("아 여행가고싶다...")
}

continue문은 그 당시의 뒷 내용을 무시하고 다음회의 루프로 넘어갑니다. 그러면 첫번째에는 print함수가 실행되지 않겠죠?

break문은 그 회차에서 자신이 속해있는 루프를 탈출해버립니다. 그러면 i가 4일때 print함수가 실행되지 않을 뿐더러 아예 다음 회차는 실행되지않습니다.

fallthrough

위의 switch문에서 보신것처럼 단순히 해당 비교패턴을 다음의 비교패턴과 동일한 결과를 원할때 사용합니다.

return

특정 함수에서 끝을 낼때 씁니다.

if 조건식 {
	return 실행문
}

조건식을 만족하면 실행문의 내용을 실행하며 이 if문을 종료합니다.

0개의 댓글