iOS 앱 개발자 독학 D+5 [Swift_흐름제어]

Dev-dinx·2021년 1월 9일
post-thumbnail

흐름제어

조건문

if 구문

if else 구문은 대표적인 조건문으로 if,else 등의 키워드를 사용하여 구현한다.
swift의 if 구문은 **'값이 꼭 Bool 타입'이어야 한다.

else if 는 몇 개가 이어져도 상관없고 else 블록은 없어도 상관 없다.
else if 의 조건을 충족해서 블록 내부의 명령문이 실행되면 그 다음에 이어진 else if 의 조건을 충족하더라도 실행되지 않고 조건문을 빠져나온다.

let someInteger = 100

if someInteger < 100 {
    print("100미만")
} else if someInteger > 100 {
    print("100초과")
}  else {
    print("100")
}

let first:Int = 10
let second:Int = 10

if first > second {
    print("역시 처음이야")
} else if first < second {
    print("두번째가 짱이지")
} else {
    print("그거나그거나~")
}

let one:Int = 5
let two:Int =  5
var biggerValue:Int = 0

if one > two {
    biggerValue = one
} else if one == two {
    biggerValue = one
} else if first < two {
    biggerValue = two
} else if one == 5 {
    biggerValue = 100       //  위에 조건이 충족되어 있기 때문에 100은 출력 되지 않는다.
}

print(biggerValue)

let sameOne:Int = 5
let sameTwo : Int = 5
var sameValue : Int = 0

if (sameOne > sameTwo) {
    sameValue = sameOne
}   else if (sameOne == sameTwo) {
    sameValue = sameOne
}   else if (sameOne < sameTwo) {
    sameValue = sameTwo
}   else if (sameOne == 5) {
    sameValue = 100         // 위와 동일함, 조건을 소괄호로 묶어주는 것은 선택사항
}

let userID:String = "xind"

var inPutID:String = "xind"


if userID == inPutID {
    print("Hello," + "\(userID)")
} else {
    print("Who are you?")

switch 구문

  • switch 구문은 if문과 같이 조건 제어문에 속하지만 switch 구문은 부등식이 사용될 수 없다.

    if문이 'Bool 타입에 의해 true일 경우' 블록이 실행된다고 한다면, switch문은 '비교할 변수가 어떤 값을 가지냐'에 따라 실행문을 선택하게 된다. 즉 switch문은 크고 작다를 표현하는 것이 아니라, 동등 조건만 검사할 수 있다.
let someString:String = "리신"

switch someString {
case "리신" :
    print("정글")
case "트리스타나" :
    print("원딜")
default :
    print("트롤")
}

var value = 2
var days: Int = 0

switch (value) {
case 1,3,5,7,8,10,12:
    print("31일까지 존재")
case 4,6,9,11:
    print("30일까지 존재")
case 2:
    print("28 혹은 29일까지 존재")
default:
    print("달을 정확히 입력하세요")
}

let num = 25
let count: String

switch num {
case 0...9 :
    count = "한자리 수"
case 10...99:
    count = "두자리 수"
case 100...999:
    count = "세자리 수"
default:
    count = "네자리 수 이상"
} // num 이라는 상수에 대하여, num이 0~9까지의 범위 이면 count = 한자리 수.

print("\(count)입니다.")


var value1 = 4
switch (value1) {
case 4:
    print("4")
    fallthrough
case 3:
    print("3")
    fallthrough
case 2:
    print("2")
    fallthrough
case 1:
    print("1")
    fallthrough
default:
    print("none")
}   // fallthrough는 break를 걸지 않고 쭉 내려온다. (스위프트에서는 자동으로 break가 걸려있기 때문에)
  • 타 프로그래밍 언어에서의 switch 는 case 가 끝날 때 마다 break를 넣어줘야 하지만 Swift에서는 자동으로 break가 걸린다.

반복문

조건에 따라 실행되어야 하는 명령어는 조건문을 통해 분기한다면, 같거나 비슷한 명령을 반복 실행할 때는 반복문을 사용. 특히나 배열과 같은 시퀀스, 순서가 있는 데이터는 반복문으로 편하게 처리할 수 있다.

for-in 구문

for-in 반복 구문은 반복적인 데이터나 시퀀스를 다룰 때 가장 많이 사용한다.
for 문은 문자열 또는 튜플이 들어갔을 때 안에 있는 요소를 하나씩 반복한다.

for 임시 상수 in 시퀀스 아이템(문자열,튜플) {
실행 코드
}

for i in 0...2 {
    print(i)
}

for i in 0...5 {
    
    if i.isMultiple(of: 2) {
        print(i)
        continue // continue 키워드를 사용하면 바로 다음 시퀀스로 건너뛴다.
    }
    
    print("\(i) == 홀수")
}

let helloSwift: String = "Hello, Swift!"

for char in helloSwift {
    print(char)
}

var result: Int = 1
for _ in 1...3 { 
    result *= 10 // 시퀀스에 해당하는 값이 필요 없다면 와일드카드 식별자(_)를 사용
}

print("10의 3제곱은 \(result)입니다.")


let freinds: [String:Int] = ["Jay":35, "Joe":25, "Anna":28]

for n in freinds {
    print(n)
}
  • Dictionary를 이용한 for-in 구문
let 픽창:[String:String] =
    ["탑" : "다리우스", "정글" : "리신", "미드" : "아칼리", "원딜" :"진", "서폿" : "레오나" ]

for (포지션, 챔피언) in 픽창 {
    print("\(포지션) : \(챔피언)") // 포지션에는 키, 챔피언에는 값
}
  • Set를 이용한 for-in 구문
let 지역번호:Set<String> = ["02", "031", "042", "041"]

for 번호 in 지역번호 {
    print(번호)
}

while 구문

특정 조건(Bool 타입)이 성립하는 한 블록 내부의 코드를 반복해서 실행한다.

var names: [String] = ["joker", "jenny", "nove", "max"]

while names.isEmpty == false {
    print("Good bye \(names.removeFirst())") // removeFirst() 는 요소를 삭제함과 동시에 삭제한 요소를 반환한다.

repeat-while 구문

  • repeat 블록의 코드를 최초 1회 실행한 후, while 다음의 조건이 성립하면 블록 내부의 코드를 반복실행한다.
var name:[String] = ["john", "chalse", "jessica", "menny"]

repeat {
    print("Good bye \(name.removeFirst())")
} while name.isEmpty == false

마무리

  • 책에는 정말 문법에 대한 내용만 나와있고 자세한 설명이 나와있지 않았습니다.. 예를 들어 switch와 if문에 대한 차이도 자세하게 명시되어 있지 않고 그저 '타 프로그래밍 언어와 비슷한 기능을 한다' 라고만 나와있어서 이해하기가 어려웠습니다.
    그래서 c언어의 switch문을 찾아보고 나와있는 개념을 적어두었습니다.
    프로그래밍에 대한 아무런 지식이 없는 비전공자에게는 하나하나 이해하기가 너무 어렵네요 T.T


    앞으로는 문법 공부를 겸해서 SwiftUI나 실질적으로 어플리케이션을 만들어볼까 합니다. 문법만 공부하다보니 저에게 지금 당장 필요하지 않은 세세한 문법까지 보게 되는 것 같아, 실습을 병행하면서 공부해볼까 합니다.
    Swift 문법과 더불어 실습까지 포스팅 해보도록 하겠습니다.

감사합니다 :)

profile
비전공자 iOS 개발자 준비중입니다 :)

0개의 댓글