[Swift 기초] 제어구문 - 조건문(흐름제어)

2022. 3. 7. 15:10Swift 기초 정리

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

  • 흐름제어: 프로그램의 실행될 코드와 그것들의 순서를 결정하는 것

 

1. if-else

if 조건 {
	/*실행 구문*/
}else if 조건 {
	/*실행 구문*/
}else {
	/*실행 구문*/
}
  • if-else 구문의 기본형태, if만 단독적으로 사용해도 되고, else if, else와 조합하여 사용 가능
  • 조건 값을 감싸는 소괄호는 선택사항, 중괄호는 필수
  • if문: 조건식의 결과가 true이면 해당 코드 블록을 실행하며, false면 실행하지 않는다.
    • 조건식은 변수, 상수, 연산자, 함수 등으로 구성될 수 있다.
  • if 뒤의 조건 값에는 Bool 타입의 값만 위치해야 함, 빈 문자열이나 배열도 명확한 길이가 0인지 검사
    • Unary operator '!' cannot be applied to an operand of type 'Int’
    //if 뒤의 조건 값에 bool
    var number = 0 
    	if !number {  //Unary operator '!' cannot be applied to an operand of type 'Int'
    	//...
    }
    
    //문자열이나 배열을 확인할 때
    var name = ["A", "B", "C"]
    if name.isEmpty { //false
    	//...
    }
    
  • 복합 조건(compound conditional): 하나 이상의 조건식을 검사하여 true 또는 false를 반환하는 조건
    • &&는 “and”를, ||는 “or”를 의미한다.
  • 다중조건(complex conditional): 여러 조건의 검사를 하나의 코드 블록으로 할 수 있다. if-else-if 블록

 

2. switch

switch 비교값 {
	case 패턴:
		/*실행 구문*/  
	default:
		/*실행 구문*/ 
}
  • switch문: 하나의 표현식(변수 등)에 대해 여러 다른 경우(case)로 비교하는 단일 코드 블록
    • 한 case 문이 true면 그 case에 포함된 코드가 실행되고 switch문이 끝난다.
    • 만일 모든 case 문이 true가 아니면 switch문의 default 코드가 실행된다.
  • 명시적 break를 하지 않아도 자동으로 case마다 break된다.
  • 매우 한정적인 값(enum, case 등)이 비교값이 아닌 한 default 구문은 반드시 작성
  • 각각의 case 내부에는 실행가능한 코드가 반드시 위치해야 한다. → fallthrough
    • 'case' label in a 'switch' should have at least one executable statement
    • fallthrough를 사용하면 break를 무시할 수 있다.
    var ch = "B"
    
    switch ch {
    	case "A":
        	//'case' label in a 'switch' should have at least one executable statement
    		fallthrough  //fallthrough를 사용하면 다음 case로 넘어간다.
    	case "B":
        	"match"
    	default:
    	    "unmatch"
    }
  • 하나의 case 문에서 여러 개의 값을 검사할 수 있다: 쉼표를 사용하여 하나의 case에 여러 패턴 명시
  • var grade = "X"
    
    switch grade
    {
    	case "A", "a":
    		print("good")
    	
    	...
    	
    	default:
    		print("nothing")
    }
  • 범위 매칭 연산: 1...5와 같은 정수형 범위와 함께, “A”...”Z”와 같은 문자형 범위 매칭 연산도 가능하다.
  • switch ch {
    	case "A"..."Z":
        	"대문자"
    	case "a"..."z":
        	"소문자"
    	default:
        	"알파벳 아님"
    }
  • 튜플 매칭
    • 임의의 가능한 값을 지정하는 와일드카드로 _(언더바) 사용 가능
    • let 문을 이용해서 조건이 맞을 경우, 튜플 값을 변수에 할당할 수 있음
    • let ... where 문을 이용하여 튜플 값이 주어진 조건에 맞을 경우 실행하도록 할 수 있음
    var point = (100,2)
    switch (point){
    	case (0,0):
            "원점"
    	case (_,0):  //임의의 가능한 값을 지정하는 와일드카드로 _(언더바) 사용 가능
        	"y축"
    	case (0,_):
        	"x축"
    	case let (x,y) where x == y:  //let ... where 문을 이용하여 튜플 값이 주어진 조건에 맞을 경우 실행
        	print("x와 y는 같은 값을 가집니다.")
    	case (let x, 0...2):  //조건을 범위로 지정할 수 있음
        	print("좌표의 x변수는 \\(x)로 y변수가 0 이상 2 이하의 범위에 있습니다.")
    	case let (x,y):
        	print("in point, x= \\(x), y= \\(y)")  //let 문을 이용해서 조건이 맞을 경우, 튜플 값을 변수에 할당할 수 있음
    }
    //좌표의 x변수는 100로 y변수가 0 이상 2 이하의 범위에 있습니다.
  • switch문 continue
    • swift에서는 fallthrough를 자동으로 지원하지 않기 때문에 다른 case를 수행하지 않고 for문으로 돌아가기 위해 continue 사용
    var strInput = "I am hungry"
    var strOutput = ""
    
    for ch in strInput {
        switch ch {
        case " ":
            //continue  //Iamhungry
    	//fallthrough  //I am hungry
        default:
            strOutput.append(ch)
        }
    }
    print(strOutput)

 

 

 

 

참고하였습니다. 감사합니다.

https://yagom.net/courses/swift-basic/lessons/제어구문/topic/조건문/

 

스위프트 기초 - 야곰닷넷

스위프트는 문법표현의 다양성이 매우 높은 언어입니다. 그래서 스위프트 문법의 모든 형태를 알기는 꽤 오랜 시간이 걸립니다. 그렇지만 최소한의 핵심 문법을 통해 무리없이 스위프트 문법을

yagom.net

https://www.inflearn.com/course/창원대학교-박동규-교수의-swift-기초-강좌/lecture/1890?tab=note&mm=null 

 

창원대학교 박동규 교수의 Swift 언어 기초 강좌 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

https://devxoul.gitbooks.io/ios-with-swift-in-40-hours/content/Chapter-2/control-flow.html

 

조건문과 반복문 · 40시간만에 Swift로 iOS 앱 만들기

 

devxoul.gitbooks.io

23.06.27 수정) Swift 쉽게, 더 쉽게

https://www.yes24.com/Product/Goods/17652267

728x90

'Swift 기초 정리' 카테고리의 다른 글

[Swift 기초] 함수  (0) 2022.03.11
[Swift 기초] 제어구문-반복문  (0) 2022.03.07
[Swift 기초] 컬렉션 타입  (0) 2022.03.06
[Swift 기초] 튜플 Tuple  (0) 2022.03.06
[Swift 기초] Any, AnyObject, nil  (0) 2022.02.17