if 구문에서 조건에 소괄호를 씌우는 것은 선택사항
import Foundation
public func chapter6() {
print("==================== chapter 6 ====================\n\n")
흐름제어()
}
public func 흐름제어() {
print("if구문\n")
let left: Int = 100
let right: Int = 90
if left > right {
print("left var is large")
}
,(쉼표)
를 사용하여 다양한 조건을 하나의 case에 넣을수있다 print("\nswitch구문\n")
/*
switch input_value {
case compare_1:
exectue_
case compare_2:
execute_
fallthrough //compare_2의 case가 종료되어도 자동으로 끝나지 않고 밑의 case 진행
case compare_3, compare_4, compare_5: //한꺼번에 여러값과 비교
execute_
break; //선택사항 없어도 알아서 case종료와 함께 switch구문 종료
default:
execute_
}
*/
let val: Int = 100
switch val {
case ..<10:
print("small number>\(val)")
case 10..<100:
print("10이상 100미만의 수>\(val)")
case 100...:
print("100이상의 수>\(val)")
default:
print("수가 아닌 그외의 값>\(val)")
}
//값 바인딩을 사용한 튜플 switch case
print("\n값 바인딩을 사용한 튜플 switch case\n")
typealias nameAge = (name: String, Age: Int)
let woonsik: nameAge = (name: "woonsik", Age: 27)
switch woonsik {
case ("woonsik", 26):
print("nice to meet you \(woonsik.name), are you \(woonsik.Age) years old?")
case ("woonsik", _):
print("nice to meet you \(woonsik.name), how old are you?\nre: maybe \(woonsik.Age)")
case (_, 26):
print("your age is 26 what is your name?\nre my name is \(woonsik.name)")
default:
print("i don't know who you are")
}
print("\nwhere를 사용하여 switch case 확장\n")
let 직급: String = "사원"
let 연차: Int = 1
let is인턴: Bool = true
switch 직급 {
case "사원" where is인턴 == true:
print("저는 인턴입니다")
case "사원" where is인턴 == false && 연차 < 3:
print("저는 새내기 사원입니다")
case "사원" where is인턴 == false && 연차 >= 3:
print("저는 사원입니다")
case "대리":
print("저는 대리입니다")
default:
print("나를 몰라?")
}
print("\n열거형을 입력값으로 받는 switch 구문\n")
enum School {
case 유치원, 중학교, 고등학교, 대학교, 졸업, 미취업
}
let 최종학력: School = School.유치원
switch 최종학력 {
case .유치원:
print("최종학력은 \(School.유치원)입니다.")
case .중학교:
print("최종학력은 \(School.중학교)입니다.")
case .고등학교:
print("최종학력은 \(School.고등학교)입니다.")
case .대학교:
print("최종학력은 \(School.대학교)입니다.")
case .졸업:
print("최종학력은 \(School.졸업)입니다.")
// default:
// print("미취학아동입니다")
// enum과 같은 열거형의 경우 올수 있는 case가 이미 명확하므로 따로 default를 설정해주지 않아도 된다 (어짜피 해놔도 실행될일이 없으므로)
case .미취업:
print("최종학력은 \(School.미취업)입니다.")
// @unknown case _:
// print("최종학력이 무엇입니까?")
//unknown속성으로 만약 열거형 변수에 요소가 변경될 경우를 대비해 모든 경우에 대해 처리할 수 있도록 해준다
//만약 열거형에 추가된 값에 대해 처리하지 않는 경우가 존재할경우를 대비해 @unknown 속성을 추가해준다 (논리적 오류 방지)
}
// 반복문
print("\n 반복문 \n")
// for - int 구문
print("\n for-in 구문\n")
/*
for 임시상수 in 시퀀스아이템 {
실행코드
}
*/
for i in 0...2 {
print(i)
}
for i in 0...5 {
if i.isMultiple(of: 2) {
print(i)
continue
}
print("\(i) is 홀수")
}
print("\n기본 데이터 타입의 for-in반복 구문 사용\n")
//Dictionary
print("dictionary_1")
let friends : [String: Int] = ["woonsik": 26, "byeori": 23, "jongjin": 26]
for tuple in friends {
print(tuple)
}
print()
for tuple in friends {
if (tuple.value == 26) {
print(tuple)
}
}
print("dictionary_2")
let 주소 : [String: String] = ["도": "경기도", "시군구": "안양시 동안구", "동읍면": "관양동"]
for (키, 값) in 주소 {
print("\(키) : \(값)")
}
print("Set_1")
let 지역번호: Set<String> = ["02", "031", "032", "033", "041", "042", "043", "051", "052", "053", "054", "055", "061", "062", "063", "064"]
for 번호 in 지역번호 {
print(번호)
}
//while문
print("\nwhile 구문\n")
var names: [String] = ["Woonsik", "Byeori", "JongJin"]
while names.isEmpty == false {
print("Good Bye \(names.removeFirst())~!")
}
//repeat-while문
print("\nrepeat while\n")
//do while문과 같은 형태이다
//최초 1회 실행 후 while 조건이 성립하면 블록내의 코드를 반복 (1회 실행 보장)
names = ["Woonsik", "Byeori", "JongJin"]
repeat {
print("welcome to my home \(names.removeFirst())!")
} while names.isEmpty == false
//구문 이름표
print("/n구문 이름표\n")
var numbers: [Int] = [1,2,3,4,10,100,101,1002,333,444,4343]
numbersLoop: for num in numbers {
if num < 0 || num > 10 {
continue
}
var count: Int = 0
printLoop: while true {
print(num)
count += 1
if count == num {
break printLoop
}
}
removeLoop: while true {
if num != numbers.first {
continue
}
numbers.removeFirst()
break removeLoop
}
}
print(numbers)
함수 실행 후 변경된 배열의 요소
//[100, 101, 1002, 333, 444, 4343]
}