개발 못해요! 그냥 못해요

[swift] 타입/기본 연산자/ 조건문/ 반복문 본문

Study/iOS

[swift] 타입/기본 연산자/ 조건문/ 반복문

this_is_mins 2024. 5. 3. 16:34

타입이 뭔데요(해봅시다^^)

변수, 상수, 함수, 클래스 등등 얘네가 가질 수 있는 형식!

1. Int / UInt

Int

  • 정수 타입 (64비트)

UInt

  • 양의 정수 타입 (64비트)
var someInt: Int = 23
someInt = -5

var someUInt: Int = 23
someUInt = -23 //이렇게 하면 컴파일 오류임
someUInt = someInt //이렇게 해도 타입이 안맞아서 컴파일 오류 겁나게 까다로움...

2. Float / Double

Float

  • 실수 타입 (32비트)

Double

  • 실수 타입 (64비트)
var someFloat: Float = 3.14
someFloat = 45

var someDouble: Double = 161.2
someDouble = 15 
someDouble = someFloat //이것도 컴파일 오류 또 겁나게 까다로움...

3. Character / String

Chatacter

  • 문자 타입 (유니코드 사용)

String

  • 양의 정수 타입 (64비트)
var someCharacter: Character = "A" //Char로 줄여쓸 생각은 안하는지..?너무 길다
someCharacter = "너" //한글도 되지롱~
someCharacter = "🎸"//이모지도 되지롱~
someCharacter = "재밌다" //근데 문자 타입이라 문자열은 안되지롱~~

var someString: String = "오죠사마 마라탕데스~"
someString = someTring + "오냐~" //문자열 합치기 가능~
someString = someCharacter //당연히 까다로우신 swift님께서는 오류를 선사해주심(감사합니다?)

//여러줄 쓰고 싶으면 """쓰면 됨
someString = """
나
사망년이다ㅋㅋ
까불지 말아라
"""

///근데 첫줄, 끝줄에서 줄바꿈 안하면 또 오류로 공격해줄거니까 명심해라~
someString = """
나
사망년이다ㅋㅋ
까불지 말아라"""

5. Bool

  • true / false만을 값으로 가짐
var someBool: Bool = true
someBool = false
someBool = 1 //0과1로는 못받는다,, 

6. Any

  • swift의 모든 타입을 지칭하는 키워드
var someAny: Any = 100
someAny = "아무거나 다 되지롱~"
someAny = 123.34

let someDouble: Double = someAny 

어 그러면 모든 타입 다 되니까 실수 넣어놓고 double형 변수에 넣는거 가능?

⚠️ ㄴㄴ 어림 없지 Cannot convert value of type 'Any' to specified type 'Double' 바로 에러 날림

실수형 자료를 넣더라도 Any가 double 타입은 아니기 때문에 할당 불가 (일단 지금은 이정도면 머리 속에 넣을게요 ㅎㅎ)

7. AnyObject

  • 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass {}

var someAnyObject: AnyObject = SomeClass()

someAnyObject = 123.12 //클래스만 수용가능하기에 에러 날려~ (그만 에러 날려 ㅜㅜ)

[번외] nil

  • 다른 언어에서 null, NULL 과 유사한 없음을 나타내는 키워드
someAny = nil  // 컴파일 오류발생
someAnyObject = nil  // 컴파일 오류발생

'nil' cannot be assigned to type 'AnyObject’ 라고 하는데 **이건 왜 안되는데?

다음에 알아보자~ 일단 안된다는 것만 알고 갑시다

기본 연산자

연산자 종류 나누면 끝도 없이 많은데,, 어디까지 해야하지..? 일단 해봐~

산술 연산자

: 우리가 흔히 쓰는 사칙 연산이라고 생각하면 될 듯!

뭐 다들 너무나도 잘 알거같아서 따로 예제는 안할게요

  • Addition +
  • Subtraction -
  • Multiplication *
  • Division /

나머지 연산자

: 말그대로 나누셈에서 나온 나머지 그 나머지 맞음

print(9%4) //나머지 1 나옴~

논리 연산자

  • Logical Not(!a)
  • 변수명 앞에 느낌표 를 이용해 표현
let allow = false

if !allow { //allow가 거짓이면 조건문 실행
    print("안됩니다~")
}
  • Logical AND(a && b)
  • a와 b 둘 다 만족해야만 true
let isSunny = true
let isWarm = true

if isSunny && isWarm { //둘 다 만족해야됨!
    print("오늘은 날씨가 맑고 따뜻해요!")
} else {
    print("오늘은 날씨가 맑지 않거나 추워요.")
}

  • Logical OR(a || b)
  • a나 b 둘 중 하나만 만족해도 true
let coffee = true
let drink = false

if coffee || drink { //둘 중에 하나만!
    print("커피나 술 중에 하나라도 있어요!")
} else {
    print("커피도 술도 없네요.")
}

삼항 조건 연산자

  • 표현식 : question ? answer1 : answer2
  • 해석하면 question이 true면 answer1 / false면 answer2를 실행한다~

근데 조건문이 뒤에있는데 이걸 먼저 예시로 하는게 맞나??째뜬

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

범위 연산자

: 특정 범위에 대해서 지정할 수 있는 범위 연산자

  • 보통 뒤에서 다룰 반복문에 자주 사용!
  • a…b ⇒ a 이상 b 이하라는 뜻! …이러니까 아련하고 미련해 보인다 막이래..ㅎ
  • a..<b ⇒ a 이상 b 미만
  • …a / a… / ..<a ⇒ 시작과 끝 범위 중 하나만 정해주는 연산자
let array: [Int] = [1, 2, 3, 4, 5]

//0번 인덱스부터 3번 인덱스까지
for element in array[...3] {
    print(element)                    // 1, 2, 3, 4
}
//3번 인덱스부터 끝까지
for element in array[3...] {
    print(element)                    // 4, 5
}
//0번 인덱스부터 2번 인덱스까지
for element in array[..<3] {
    print(element)                    // 1, 2, 3
}

근데 이건 배열일 경우에 무조건 시작 범위가 0번 인덱스라 ㄱㅊ은데

그게 아니라면 저렇게 에러가 나니까 주의~~

또 반대로 이렇게 끝나는 범위가 정해져 있지 않은 경우에는 미친 듯이 무한 루프가 돌아요,,,

조건문

if - else기본 표현식

  • 다른 언어들과 크게 다르지 않음~
if 조건 수식1 {
    실행 코드
}
else if 조건 수식2 {
    실행 코드
}
else if 조건 수식3 {
    실행 코드
}
else {
    실행 코드
}

이미 다들 알겠지만 예제 하나만 해보자~

import Foundation

let cutTree = 10

if cutTree >= 11 {
    print("이제 그만 찍으세요,, 망하셨어요")
} else if  cutTree >= 5 {
    print("이정도면 넘어올 수도?")
} else {
    print("아직 더 찍으셔야할듯~~")
}

열번찍어 안넘어가는 나무 없다? 10번까지만 하세요 ㅎㅎ

제가 설정한 조건문을 보면

  • 11번 이상 찍으면 "이제 그만 찍으세요,, 망하셨어요"를 출력
  • 5 ~ 10까지는 "이정도면 넘어올 수도?"
  • 5번 미만은 "아직 더 찍으셔야할듯~~"을 출력해준다!

switch 기본 표현식

swift 입력 값 {
case 비교 값1 :
    살행 코드
case 비교 값2 :
    실행 코드
    // 이번 case를 마치고 switch 구문을 탈출하지 않음
    fallthrough
case 비교 값3, 비교 값4, 비교 값5 : // 한 번에 여러 값 비교 가능
    실행 코드
    break   // break 키워드의 사용은 선택 사항
default :
    실행 코드
}
let day = "Monday"

switch day {
case "Monday":
    print("이제 월요일입니다.")
case "Tuesday":
    print("아직도 화요일입니다.")
case "Wednesday":
    print("왜 아직도 수요일입니다.")
case "Thursday":
    print("이제야 목요일입니다.")
case "Friday":
    print("드디어 금요일입니다.")
case "Saturday":
    print("토요일입니다.")
case "Sunday":
    print("절망의 일요일입니다.")
default:
    print("유효하지 않은 요일입니다.")
}

  • day에 할당된 값을 기준으로 구문 시작!
  • 각 case에 있는 값과 비교해 코드블록을 돌기 시작하고 일치하면 해당 요일을 출력!!
  • default는 위의 case들이 모두 아니면 실행됨 (if-else에서 else라고 생각하면 좋을듯!)

🔍 조건문과 삼항연산자!!

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

반복문

for - in 구문

for count in 1...5 {
    print(count)
}
  • 1부터 5까지 총 5번 반복할거고 count 변수를 출력하면 이렇게 결과가나옴!

❗️Wildcard Pattern

우선 예제 코드를 먼저 보자

for count in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

문자열이 5번 출력되는건 이제 알겠음!

근데 앞에서는 count에 값을 출력해서 count변수를 활용했지만 이번에는 굳이 반복 상수를 쓸일이 없어짐 ㅜㅜㅜ

코드를 치면 경고가 나오는데

count 변수가 사용된적이 없으니 _로 대체하라는 그 말이 나온다

이게 바로 Wildcard Pattern 임! 밑에는 수정된 코드!

for _ in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

For - in Collection

let list: [String] = ["여러분","제발","집 좀 갑시다..."]

for talk in list{
    print(talk)
}

//출력 결과 :
//여러분
//제발
//집 좀 갑시다...
  • 문자열 배열을 선언하고 출력하는 코드다!
  • list의 원소 개수인 3만큼 반복되고 talk에는 list가 열가되면서 원소 값이 차례대로 하나씩 담김!

For - in Stride

for i in stride(from: 1, to: 10, by: 2) {
    print(i) // 1, 3, 5, 7, 9
  • from, to, by를 통해 시작값, 끝 값 , 간격을 설정할 수 있음!
  • 위에 예시를 보면 1부터 10까지 2씩 증가하는 반복문이라는 걸 알 수 있음!!

For - where

for number in 1...10 where number % 2 != 0 {
    print(number) // 1, 3, 5, 7, 9
}
  • for 키워드 다음에 있는 number가 1부터 10까지 반복 (…은 범위 연산자)
  • where 다음에 있는 조건인 경우에 안에 코드를 실행!

while 구문

var num = 1
var sum = 0

while num <= 100 {
	sum += num
    num += 1
}

print(sum)
  • 완전 간단한 1부터 100까지 합 구하는 프로그램
  • num이 100일 때까지 안에 구문을 반복
    • sum 변수에 num을 넣어줌
    • num이 1씩 증가하도록 선언
    • num이 100보다 크다면 반복문 종료!

repeat 구문

앞에서 만들었던 1부터 100까지 합 구하는 프로그램을 repeat구문으로 바꿔보겠음!!

var num = 0
var sum = 0

repeat {
    sum += num
    num += 1
} while num <= 100

print(sum)
  • repeat 구문은 while 뒤에 조건이 true일 동안 내부의 코드가 실행된다!

❓근데 뭐가 다른데 while문이랑?

다른 예시로 비교를 해볼게요!

var num = 10

while num < 10 {
    num += 1
}

print(num)

var num = 10

repeat {
    num += 1
} while num < 10

print(num)

둘이 같은 조건식 달아줌!! 결과가 어케 나올까요???

1️⃣ while문을 먼저보면

num = 10 인데 조건이 10보다 작을때만 반복문을 실행하기 때문에 반복문을 실행하지 않고바로 num을 출력

2️⃣ repeat문을 보면

num과 조건식이 같아 반복문을 실행을 안할것 같지만?

repeat의 경우 조건식을 나중에 판단하기 때문에 일단 반복문을 실행한 후에 조건식을 판별합니다

그래서 일단 num에 +1을 하게되어 11이 출력됩니다~

둘의 차이를 주의해서 사용해요오 우리~~


키워드 - 타입

  • 아래 코드의 타입을 추론하고, 왜 이렇게 출력되는지 생각해보아요~
  • 만약 pi, grade의 타입을 float, String으로 출력하고 싶으면 어떻게 하면 될까요?
  • hint
  • 타입 안정성, 타입 추론, 타입 명시
let pi = 3.141592 
let grade = "A" 
print(pi) // --- 1
print(grade) // --- 2
let pi = 3.141592
let grade = "A"

print(type(of: pi))    //Double
print(type(of: grade)) //String

swift는 타입에 굉장히 예ㅖ민함,,앞에서 봤던 것 처럼

변수를 선언할 때 타입을 직접 명시해주지 않으면 타입 추론을 통해 타입을 결정함!

let pi = 3.141592
let grade = "A"

print(type(of: Float(pi)))   
print(type(of: Character(grade)))

이렇게 직접 타입을 변환해주어 출력 시에만 원하는 타입의 값으로 사용가능함!!

키워드 - 기본 연산자, 조건문

  • 아래 코드를 삼항연산자를 통해서 표현해보세요!
var myMind: String?
var ifULoveMe: Bool?

//여기서부터
if ifULoveMe {
        myMind = "나도 너 좋아했어!!! 나랑 사귀자!!!"
} else {
        myMind = "나도 너 안 좋아했어! 흥칫뿡야야!!!"
}
//여기까지를 삼항연산자로 표현해주보세여~ 시로요
var myMind: String?
var ifULoveMe: Bool?

myMind = ifULoveMe == true ? "나도 너 좋아했어!!! 나랑 사귀자!!!" : "나도 너 안 좋아했어! 흥칫뿡야야!!!"

print(myMind)

멘트가 하여자인걸

키워드 - 반복문

  • 0,2,4,6,8을 출력하는 구문을 for-stride, for-where, while, repeat-while을 사용해서 만들어보세용!

for-stride

for i in stride(from: 0, through: 8, by: 2) {
    print(i)
}

for-where

for i in 0...8 where i % 2 == 0 {
    print(i)
}

while

var i = 0
while i <= 8 {
    print(i)
    i += 2
}

repeat-while

var i = 0
repeat {
    print(i)
    i += 2
} while i <= 8

5. 한줄 정리

  • 타입 : 스위프트는 타입에 굉장히 예~~~민한 친구 타입을 잘 유의해서 사용하자..
  • 기본 연산자 : 범위 연산자같은 특별한 연산자가 있음 시작 범위가 없거나 끝범위가 없으면 에러가 나거나 무한루프를 돌 수 있음 명심하긔~~
  • 조건문 : 간단한 조건문은 삼항 연산자로 바꿔 쓸 수 있지만 삼항연산자가 너무 복잡해지면 오히려 가독성이 떨어질 수 있으니 주의해야함!!
  • 반복문 : 내가 아는 반복문은 for while 밖에 없는데.. 스위트프는 너무나도 많아요… 조건을 먼저 보고 반복문을 실행하는지 아니면 반복문을 실행하고 조건을 보는지 주의해야할듯!!

타입이 뭔데요(해봅시다^^)

변수, 상수, 함수, 클래스 등등 얘네가 가질 수 있는 형식!

1. Int / UInt

Int

  • 정수 타입 (64비트)

UInt

  • 양의 정수 타입 (64비트)
var someInt: Int = 23
someInt = -5

var someUInt: Int = 23
someUInt = -23 //이렇게 하면 컴파일 오류임
someUInt = someInt //이렇게 해도 타입이 안맞아서 컴파일 오류 겁나게 까다로움...

2. Float / Double

Float

  • 실수 타입 (32비트)

Double

  • 실수 타입 (64비트)
var someFloat: Float = 3.14
someFloat = 45

var someDouble: Double = 161.2
someDouble = 15 
someDouble = someFloat //이것도 컴파일 오류 또 겁나게 까다로움...

3. Character / String

Chatacter

  • 문자 타입 (유니코드 사용)

String

  • 양의 정수 타입 (64비트)
var someCharacter: Character = "A" //Char로 줄여쓸 생각은 안하는지..?너무 길다
someCharacter = "너" //한글도 되지롱~
someCharacter = "🎸"//이모지도 되지롱~
someCharacter = "재밌다" //근데 문자 타입이라 문자열은 안되지롱~~

var someString: String = "오죠사마 마라탕데스~"
someString = someTring + "오냐~" //문자열 합치기 가능~
someString = someCharacter //당연히 까다로우신 swift님께서는 오류를 선사해주심(감사합니다?)

//여러줄 쓰고 싶으면 """쓰면 됨
someString = """
나
사망년이다ㅋㅋ
까불지 말아라
"""

///근데 첫줄, 끝줄에서 줄바꿈 안하면 또 오류로 공격해줄거니까 명심해라~
someString = """
나
사망년이다ㅋㅋ
까불지 말아라"""

5. Bool

  • true / false만을 값으로 가짐
var someBool: Bool = true
someBool = false
someBool = 1 //0과1로는 못받는다,, 

6. Any

  • swift의 모든 타입을 지칭하는 키워드
var someAny: Any = 100
someAny = "아무거나 다 되지롱~"
someAny = 123.34

let someDouble: Double = someAny 

어 그러면 모든 타입 다 되니까 실수 넣어놓고 double형 변수에 넣는거 가능?

⚠️ ㄴㄴ 어림 없지 Cannot convert value of type 'Any' to specified type 'Double' 바로 에러 날림

실수형 자료를 넣더라도 Any가 double 타입은 아니기 때문에 할당 불가 (일단 지금은 이정도면 머리 속에 넣을게요 ㅎㅎ)

7. AnyObject

  • 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass {}

var someAnyObject: AnyObject = SomeClass()

someAnyObject = 123.12 //클래스만 수용가능하기에 에러 날려~ (그만 에러 날려 ㅜㅜ)

[번외] nil

  • 다른 언어에서 null, NULL 과 유사한 없음을 나타내는 키워드
someAny = nil  // 컴파일 오류발생
someAnyObject = nil  // 컴파일 오류발생

'nil' cannot be assigned to type 'AnyObject’ 라고 하는데 **이건 왜 안되는데?

다음에 알아보자~ 일단 안된다는 것만 알고 갑시다

기본 연산자

연산자 종류 나누면 끝도 없이 많은데,, 어디까지 해야하지..? 일단 해봐~

산술 연산자

: 우리가 흔히 쓰는 사칙 연산이라고 생각하면 될 듯!

뭐 다들 너무나도 잘 알거같아서 따로 예제는 안할게요

  • Addition +
  • Subtraction -
  • Multiplication *
  • Division /

나머지 연산자

: 말그대로 나누셈에서 나온 나머지 그 나머지 맞음

print(9%4) //나머지 1 나옴~

논리 연산자

  • Logical Not(!a)
  • 변수명 앞에 느낌표 를 이용해 표현
let allow = false

if !allow { //allow가 거짓이면 조건문 실행
    print("안됩니다~")
}
  • Logical AND(a && b)
  • a와 b 둘 다 만족해야만 true
let isSunny = true
let isWarm = true

if isSunny && isWarm { //둘 다 만족해야됨!
    print("오늘은 날씨가 맑고 따뜻해요!")
} else {
    print("오늘은 날씨가 맑지 않거나 추워요.")
}

  • Logical OR(a || b)
  • a나 b 둘 중 하나만 만족해도 true
let coffee = true
let drink = false

if coffee || drink { //둘 중에 하나만!
    print("커피나 술 중에 하나라도 있어요!")
} else {
    print("커피도 술도 없네요.")
}

삼항 조건 연산자

  • 표현식 : question ? answer1 : answer2
  • 해석하면 question이 true면 answer1 / false면 answer2를 실행한다~

근데 조건문이 뒤에있는데 이걸 먼저 예시로 하는게 맞나??째뜬

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

범위 연산자

: 특정 범위에 대해서 지정할 수 있는 범위 연산자

  • 보통 뒤에서 다룰 반복문에 자주 사용!
  • a…b ⇒ a 이상 b 이하라는 뜻! …이러니까 아련하고 미련해 보인다 막이래..ㅎ
  • a..<b ⇒ a 이상 b 미만
  • …a / a… / ..<a ⇒ 시작과 끝 범위 중 하나만 정해주는 연산자
let array: [Int] = [1, 2, 3, 4, 5]

//0번 인덱스부터 3번 인덱스까지
for element in array[...3] {
    print(element)                    // 1, 2, 3, 4
}
//3번 인덱스부터 끝까지
for element in array[3...] {
    print(element)                    // 4, 5
}
//0번 인덱스부터 2번 인덱스까지
for element in array[..<3] {
    print(element)                    // 1, 2, 3
}

근데 이건 배열일 경우에 무조건 시작 범위가 0번 인덱스라 ㄱㅊ은데

그게 아니라면 저렇게 에러가 나니까 주의~~

또 반대로 이렇게 끝나는 범위가 정해져 있지 않은 경우에는 미친 듯이 무한 루프가 돌아요,,,

조건문

if - else기본 표현식

  • 다른 언어들과 크게 다르지 않음~
if 조건 수식1 {
    실행 코드
}
else if 조건 수식2 {
    실행 코드
}
else if 조건 수식3 {
    실행 코드
}
else {
    실행 코드
}

이미 다들 알겠지만 예제 하나만 해보자~

import Foundation

let cutTree = 10

if cutTree >= 11 {
    print("이제 그만 찍으세요,, 망하셨어요")
} else if  cutTree >= 5 {
    print("이정도면 넘어올 수도?")
} else {
    print("아직 더 찍으셔야할듯~~")
}

열번찍어 안넘어가는 나무 없다? 10번까지만 하세요 ㅎㅎ

제가 설정한 조건문을 보면

  • 11번 이상 찍으면 "이제 그만 찍으세요,, 망하셨어요"를 출력
  • 5 ~ 10까지는 "이정도면 넘어올 수도?"
  • 5번 미만은 "아직 더 찍으셔야할듯~~"을 출력해준다!

switch 기본 표현식

swift 입력 값 {
case 비교 값1 :
    살행 코드
case 비교 값2 :
    실행 코드
    // 이번 case를 마치고 switch 구문을 탈출하지 않음
    fallthrough
case 비교 값3, 비교 값4, 비교 값5 : // 한 번에 여러 값 비교 가능
    실행 코드
    break   // break 키워드의 사용은 선택 사항
default :
    실행 코드
}
let day = "Monday"

switch day {
case "Monday":
    print("이제 월요일입니다.")
case "Tuesday":
    print("아직도 화요일입니다.")
case "Wednesday":
    print("왜 아직도 수요일입니다.")
case "Thursday":
    print("이제야 목요일입니다.")
case "Friday":
    print("드디어 금요일입니다.")
case "Saturday":
    print("토요일입니다.")
case "Sunday":
    print("절망의 일요일입니다.")
default:
    print("유효하지 않은 요일입니다.")
}

  • day에 할당된 값을 기준으로 구문 시작!
  • 각 case에 있는 값과 비교해 코드블록을 돌기 시작하고 일치하면 해당 요일을 출력!!
  • default는 위의 case들이 모두 아니면 실행됨 (if-else에서 else라고 생각하면 좋을듯!)

🔍 조건문과 삼항연산자!!

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

반복문

for - in 구문

for count in 1...5 {
    print(count)
}
  • 1부터 5까지 총 5번 반복할거고 count 변수를 출력하면 이렇게 결과가나옴!

❗️Wildcard Pattern

우선 예제 코드를 먼저 보자

for count in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

문자열이 5번 출력되는건 이제 알겠음!

근데 앞에서는 count에 값을 출력해서 count변수를 활용했지만 이번에는 굳이 반복 상수를 쓸일이 없어짐 ㅜㅜㅜ

코드를 치면 경고가 나오는데

 

count 변수가 사용된적이 없으니 _로 대체하라는 그 말이 나온다

이게 바로 Wildcard Pattern 임! 밑에는 수정된 코드!

for _ in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

For - in Collection

let list: [String] = ["여러분","제발","집 좀 갑시다..."]

for talk in list{
    print(talk)
}

//출력 결과 :
//여러분
//제발
//집 좀 갑시다...
  • 문자열 배열을 선언하고 출력하는 코드다!
  • list의 원소 개수인 3만큼 반복되고 talk에는 list가 열가되면서 원소 값이 차례대로 하나씩 담김!

For - in Stride

for i in stride(from: 1, to: 10, by: 2) {
    print(i) // 1, 3, 5, 7, 9
  • from, to, by를 통해 시작값, 끝 값 , 간격을 설정할 수 있음!
  • 위에 예시를 보면 1부터 10까지 2씩 증가하는 반복문이라는 걸 알 수 있음!!

For - where

for number in 1...10 where number % 2 != 0 {
    print(number) // 1, 3, 5, 7, 9
}
  • for 키워드 다음에 있는 number가 1부터 10까지 반복 (…은 범위 연산자)
  • where 다음에 있는 조건인 경우에 안에 코드를 실행!

while 구문

var num = 1
var sum = 0

while num <= 100 {
	sum += num
    num += 1
}

print(sum)
  • 완전 간단한 1부터 100까지 합 구하는 프로그램
  • num이 100일 때까지 안에 구문을 반복
    • sum 변수에 num을 넣어줌
    • num이 1씩 증가하도록 선언
    • num이 100보다 크다면 반복문 종료!

repeat 구문

앞에서 만들었던 1부터 100까지 합 구하는 프로그램을 repeat구문으로 바꿔보겠음!!

var num = 0
var sum = 0

repeat {
    sum += num
    num += 1
} while num <= 100

print(sum)
  • repeat 구문은 while 뒤에 조건이 true일 동안 내부의 코드가 실행된다!

❓근데 뭐가 다른데 while문이랑?

다른 예시로 비교를 해볼게요!

var num = 10

while num < 10 {
    num += 1
}

print(num)

var num = 10

repeat {
    num += 1
} while num < 10

print(num)

둘이 같은 조건식 달아줌!! 결과가 어케 나올까요???

1️⃣ while문을 먼저보면

num = 10 인데 조건이 10보다 작을때만 반복문을 실행하기 때문에 반복문을 실행하지 않고바로 num을 출력

2️⃣ repeat문을 보면

num과 조건식이 같아 반복문을 실행을 안할것 같지만?

repeat의 경우 조건식을 나중에 판단하기 때문에 일단 반복문을 실행한 후에 조건식을 판별합니다

그래서 일단 num에 +1을 하게되어 11이 출력됩니다~

둘의 차이를 주의해서 사용해요오 우리~~


키워드 - 타입

  • 아래 코드의 타입을 추론하고, 왜 이렇게 출력되는지 생각해보아요~
  • 만약 pi, grade의 타입을 float, String으로 출력하고 싶으면 어떻게 하면 될까요?
  • hint
  • 타입 안정성, 타입 추론, 타입 명시
let pi = 3.141592 
let grade = "A" 
print(pi) // --- 1
print(grade) // --- 2
let pi = 3.141592
let grade = "A"

print(type(of: pi))    //Double
print(type(of: grade)) //String

swift는 타입에 굉장히 예ㅖ민함,,앞에서 봤던 것 처럼

변수를 선언할 때 타입을 직접 명시해주지 않으면 타입 추론을 통해 타입을 결정함!

let pi = 3.141592
let grade = "A"

print(type(of: Float(pi)))   
print(type(of: Character(grade)))

이렇게 직접 타입을 변환해주어 출력 시에만 원하는 타입의 값으로 사용가능함!!

키워드 - 기본 연산자, 조건문

  • 아래 코드를 삼항연산자를 통해서 표현해보세요!
var myMind: String?
var ifULoveMe: Bool?

//여기서부터
if ifULoveMe {
        myMind = "나도 너 좋아했어!!! 나랑 사귀자!!!"
} else {
        myMind = "나도 너 안 좋아했어! 흥칫뿡야야!!!"
}
//여기까지를 삼항연산자로 표현해주보세여~ 시로요
var myMind: String?
var ifULoveMe: Bool?

myMind = ifULoveMe == true ? "나도 너 좋아했어!!! 나랑 사귀자!!!" : "나도 너 안 좋아했어! 흥칫뿡야야!!!"

print(myMind)

멘트가 하여자인걸

키워드 - 반복문

  • 0,2,4,6,8을 출력하는 구문을 for-stride, for-where, while, repeat-while을 사용해서 만들어보세용!

for-stride

for i in stride(from: 0, through: 8, by: 2) {
    print(i)
}

for-where

for i in 0...8 where i % 2 == 0 {
    print(i)
}

while

var i = 0
while i <= 8 {
    print(i)
    i += 2
}

repeat-while

var i = 0
repeat {
    print(i)
    i += 2
} while i <= 8

5. 한줄 정리

  • 타입 : 스위프트는 타입에 굉장히 예~~~민한 친구 타입을 잘 유의해서 사용하자..
  • 기본 연산자 : 범위 연산자같은 특별한 연산자가 있음 시작 범위가 없거나 끝범위가 없으면 에러가 나거나 무한루프를 돌 수 있음 명심하긔~~
  • 조건문 : 간단한 조건문은 삼항 연산자로 바꿔 쓸 수 있지만 삼항연산자가 너무 복잡해지면 오히려 가독성이 떨어질 수 있으니 주의해야함!!
  • 반복문 : 내가 아는 반복문은 for while 밖에 없는데.. 스위트프는 너무나도 많아요… 조건을 먼저 보고 반복문을 실행하는지 아니면 반복문을 실행하고 조건을 보는지 주의해야할듯!!

타입이 뭔데요(해봅시다^^)

변수, 상수, 함수, 클래스 등등 얘네가 가질 수 있는 형식!

1. Int / UInt

Int

  • 정수 타입 (64비트)

UInt

  • 양의 정수 타입 (64비트)
var someInt: Int = 23
someInt = -5

var someUInt: Int = 23
someUInt = -23 //이렇게 하면 컴파일 오류임
someUInt = someInt //이렇게 해도 타입이 안맞아서 컴파일 오류 겁나게 까다로움...

2. Float / Double

Float

  • 실수 타입 (32비트)

Double

  • 실수 타입 (64비트)
var someFloat: Float = 3.14
someFloat = 45

var someDouble: Double = 161.2
someDouble = 15 
someDouble = someFloat //이것도 컴파일 오류 또 겁나게 까다로움...

3. Character / String

Chatacter

  • 문자 타입 (유니코드 사용)

String

  • 양의 정수 타입 (64비트)
var someCharacter: Character = "A" //Char로 줄여쓸 생각은 안하는지..?너무 길다
someCharacter = "너" //한글도 되지롱~
someCharacter = "🎸"//이모지도 되지롱~
someCharacter = "재밌다" //근데 문자 타입이라 문자열은 안되지롱~~

var someString: String = "오죠사마 마라탕데스~"
someString = someTring + "오냐~" //문자열 합치기 가능~
someString = someCharacter //당연히 까다로우신 swift님께서는 오류를 선사해주심(감사합니다?)

//여러줄 쓰고 싶으면 """쓰면 됨
someString = """
나
사망년이다ㅋㅋ
까불지 말아라
"""

///근데 첫줄, 끝줄에서 줄바꿈 안하면 또 오류로 공격해줄거니까 명심해라~
someString = """
나
사망년이다ㅋㅋ
까불지 말아라"""

5. Bool

  • true / false만을 값으로 가짐
var someBool: Bool = true
someBool = false
someBool = 1 //0과1로는 못받는다,, 

6. Any

  • swift의 모든 타입을 지칭하는 키워드
var someAny: Any = 100
someAny = "아무거나 다 되지롱~"
someAny = 123.34

let someDouble: Double = someAny 

어 그러면 모든 타입 다 되니까 실수 넣어놓고 double형 변수에 넣는거 가능?

⚠️ ㄴㄴ 어림 없지 Cannot convert value of type 'Any' to specified type 'Double' 바로 에러 날림

실수형 자료를 넣더라도 Any가 double 타입은 아니기 때문에 할당 불가 (일단 지금은 이정도면 머리 속에 넣을게요 ㅎㅎ)

7. AnyObject

  • 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass {}

var someAnyObject: AnyObject = SomeClass()

someAnyObject = 123.12 //클래스만 수용가능하기에 에러 날려~ (그만 에러 날려 ㅜㅜ)

[번외] nil

  • 다른 언어에서 null, NULL 과 유사한 없음을 나타내는 키워드
someAny = nil  // 컴파일 오류발생
someAnyObject = nil  // 컴파일 오류발생

'nil' cannot be assigned to type 'AnyObject’ 라고 하는데 **이건 왜 안되는데?

다음에 알아보자~ 일단 안된다는 것만 알고 갑시다

기본 연산자

연산자 종류 나누면 끝도 없이 많은데,, 어디까지 해야하지..? 일단 해봐~

산술 연산자

: 우리가 흔히 쓰는 사칙 연산이라고 생각하면 될 듯!

뭐 다들 너무나도 잘 알거같아서 따로 예제는 안할게요

  • Addition +
  • Subtraction -
  • Multiplication *
  • Division /

나머지 연산자

: 말그대로 나누셈에서 나온 나머지 그 나머지 맞음

print(9%4) //나머지 1 나옴~

논리 연산자

  • Logical Not(!a)
  • 변수명 앞에 느낌표 를 이용해 표현
let allow = false

if !allow { //allow가 거짓이면 조건문 실행
    print("안됩니다~")
}
  • Logical AND(a && b)
  • a와 b 둘 다 만족해야만 true
let isSunny = true
let isWarm = true

if isSunny && isWarm { //둘 다 만족해야됨!
    print("오늘은 날씨가 맑고 따뜻해요!")
} else {
    print("오늘은 날씨가 맑지 않거나 추워요.")
}

  • Logical OR(a || b)
  • a나 b 둘 중 하나만 만족해도 true
let coffee = true
let drink = false

if coffee || drink { //둘 중에 하나만!
    print("커피나 술 중에 하나라도 있어요!")
} else {
    print("커피도 술도 없네요.")
}

삼항 조건 연산자

  • 표현식 : question ? answer1 : answer2
  • 해석하면 question이 true면 answer1 / false면 answer2를 실행한다~

근데 조건문이 뒤에있는데 이걸 먼저 예시로 하는게 맞나??째뜬

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

범위 연산자

: 특정 범위에 대해서 지정할 수 있는 범위 연산자

  • 보통 뒤에서 다룰 반복문에 자주 사용!
  • a…b ⇒ a 이상 b 이하라는 뜻! …이러니까 아련하고 미련해 보인다 막이래..ㅎ
  • a..<b ⇒ a 이상 b 미만
  • …a / a… / ..<a ⇒ 시작과 끝 범위 중 하나만 정해주는 연산자
let array: [Int] = [1, 2, 3, 4, 5]

//0번 인덱스부터 3번 인덱스까지
for element in array[...3] {
    print(element)                    // 1, 2, 3, 4
}
//3번 인덱스부터 끝까지
for element in array[3...] {
    print(element)                    // 4, 5
}
//0번 인덱스부터 2번 인덱스까지
for element in array[..<3] {
    print(element)                    // 1, 2, 3
}

근데 이건 배열일 경우에 무조건 시작 범위가 0번 인덱스라 ㄱㅊ은데

그게 아니라면 저렇게 에러가 나니까 주의~~

또 반대로 이렇게 끝나는 범위가 정해져 있지 않은 경우에는 미친 듯이 무한 루프가 돌아요,,,

조건문

if - else기본 표현식

  • 다른 언어들과 크게 다르지 않음~
if 조건 수식1 {
    실행 코드
}
else if 조건 수식2 {
    실행 코드
}
else if 조건 수식3 {
    실행 코드
}
else {
    실행 코드
}

이미 다들 알겠지만 예제 하나만 해보자~

import Foundation

let cutTree = 10

if cutTree >= 11 {
    print("이제 그만 찍으세요,, 망하셨어요")
} else if  cutTree >= 5 {
    print("이정도면 넘어올 수도?")
} else {
    print("아직 더 찍으셔야할듯~~")
}

열번찍어 안넘어가는 나무 없다? 10번까지만 하세요 ㅎㅎ

제가 설정한 조건문을 보면

  • 11번 이상 찍으면 "이제 그만 찍으세요,, 망하셨어요"를 출력
  • 5 ~ 10까지는 "이정도면 넘어올 수도?"
  • 5번 미만은 "아직 더 찍으셔야할듯~~"을 출력해준다!

switch 기본 표현식

swift 입력 값 {
case 비교 값1 :
    살행 코드
case 비교 값2 :
    실행 코드
    // 이번 case를 마치고 switch 구문을 탈출하지 않음
    fallthrough
case 비교 값3, 비교 값4, 비교 값5 : // 한 번에 여러 값 비교 가능
    실행 코드
    break   // break 키워드의 사용은 선택 사항
default :
    실행 코드
}
let day = "Monday"

switch day {
case "Monday":
    print("이제 월요일입니다.")
case "Tuesday":
    print("아직도 화요일입니다.")
case "Wednesday":
    print("왜 아직도 수요일입니다.")
case "Thursday":
    print("이제야 목요일입니다.")
case "Friday":
    print("드디어 금요일입니다.")
case "Saturday":
    print("토요일입니다.")
case "Sunday":
    print("절망의 일요일입니다.")
default:
    print("유효하지 않은 요일입니다.")
}

  • day에 할당된 값을 기준으로 구문 시작!
  • 각 case에 있는 값과 비교해 코드블록을 돌기 시작하고 일치하면 해당 요일을 출력!!
  • default는 위의 case들이 모두 아니면 실행됨 (if-else에서 else라고 생각하면 좋을듯!)

🔍 조건문과 삼항연산자!!

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

반복문

for - in 구문

for count in 1...5 {
    print(count)
}
  • 1부터 5까지 총 5번 반복할거고 count 변수를 출력하면 이렇게 결과가나옴!

❗️Wildcard Pattern

우선 예제 코드를 먼저 보자

for count in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

문자열이 5번 출력되는건 이제 알겠음!

근데 앞에서는 count에 값을 출력해서 count변수를 활용했지만 이번에는 굳이 반복 상수를 쓸일이 없어짐 ㅜㅜㅜ

코드를 치면 경고가 나오는데

count 변수가 사용된적이 없으니 _로 대체하라는 그 말이 나온다

이게 바로 Wildcard Pattern 임! 밑에는 수정된 코드!

for _ in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

For - in Collection

let list: [String] = ["여러분","제발","집 좀 갑시다..."]

for talk in list{
    print(talk)
}

//출력 결과 :
//여러분
//제발
//집 좀 갑시다...
  • 문자열 배열을 선언하고 출력하는 코드다!
  • list의 원소 개수인 3만큼 반복되고 talk에는 list가 열가되면서 원소 값이 차례대로 하나씩 담김!

For - in Stride

for i in stride(from: 1, to: 10, by: 2) {
    print(i) // 1, 3, 5, 7, 9
  • from, to, by를 통해 시작값, 끝 값 , 간격을 설정할 수 있음!
  • 위에 예시를 보면 1부터 10까지 2씩 증가하는 반복문이라는 걸 알 수 있음!!

For - where

for number in 1...10 where number % 2 != 0 {
    print(number) // 1, 3, 5, 7, 9
}
  • for 키워드 다음에 있는 number가 1부터 10까지 반복 (…은 범위 연산자)
  • where 다음에 있는 조건인 경우에 안에 코드를 실행!

while 구문

var num = 1
var sum = 0

while num <= 100 {
	sum += num
    num += 1
}

print(sum)
  • 완전 간단한 1부터 100까지 합 구하는 프로그램
  • num이 100일 때까지 안에 구문을 반복
    • sum 변수에 num을 넣어줌
    • num이 1씩 증가하도록 선언
    • num이 100보다 크다면 반복문 종료!

repeat 구문

앞에서 만들었던 1부터 100까지 합 구하는 프로그램을 repeat구문으로 바꿔보겠음!!

var num = 0
var sum = 0

repeat {
    sum += num
    num += 1
} while num <= 100

print(sum)
  • repeat 구문은 while 뒤에 조건이 true일 동안 내부의 코드가 실행된다!

❓근데 뭐가 다른데 while문이랑?

다른 예시로 비교를 해볼게요!

var num = 10

while num < 10 {
    num += 1
}

print(num)

var num = 10

repeat {
    num += 1
} while num < 10

print(num)

둘이 같은 조건식 달아줌!! 결과가 어케 나올까요???

1️⃣ while문을 먼저보면

num = 10 인데 조건이 10보다 작을때만 반복문을 실행하기 때문에 반복문을 실행하지 않고바로 num을 출력

2️⃣ repeat문을 보면

num과 조건식이 같아 반복문을 실행을 안할것 같지만?

repeat의 경우 조건식을 나중에 판단하기 때문에 일단 반복문을 실행한 후에 조건식을 판별합니다

그래서 일단 num에 +1을 하게되어 11이 출력됩니다~

둘의 차이를 주의해서 사용해요오 우리~~


키워드 - 타입

  • 아래 코드의 타입을 추론하고, 왜 이렇게 출력되는지 생각해보아요~
  • 만약 pi, grade의 타입을 float, String으로 출력하고 싶으면 어떻게 하면 될까요?
  • hint
  • 타입 안정성, 타입 추론, 타입 명시
let pi = 3.141592 
let grade = "A" 
print(pi) // --- 1
print(grade) // --- 2
let pi = 3.141592
let grade = "A"

print(type(of: pi))    //Double
print(type(of: grade)) //String

swift는 타입에 굉장히 예ㅖ민함,,앞에서 봤던 것 처럼

변수를 선언할 때 타입을 직접 명시해주지 않으면 타입 추론을 통해 타입을 결정함!

let pi = 3.141592
let grade = "A"

print(type(of: Float(pi)))   
print(type(of: Character(grade)))

이렇게 직접 타입을 변환해주어 출력 시에만 원하는 타입의 값으로 사용가능함!!

키워드 - 기본 연산자, 조건문

  • 아래 코드를 삼항연산자를 통해서 표현해보세요!
var myMind: String?
var ifULoveMe: Bool?

//여기서부터
if ifULoveMe {
        myMind = "나도 너 좋아했어!!! 나랑 사귀자!!!"
} else {
        myMind = "나도 너 안 좋아했어! 흥칫뿡야야!!!"
}
//여기까지를 삼항연산자로 표현해주보세여~ 시로요
var myMind: String?
var ifULoveMe: Bool?

myMind = ifULoveMe == true ? "나도 너 좋아했어!!! 나랑 사귀자!!!" : "나도 너 안 좋아했어! 흥칫뿡야야!!!"

print(myMind)

멘트가 하여자인걸

키워드 - 반복문

  • 0,2,4,6,8을 출력하는 구문을 for-stride, for-where, while, repeat-while을 사용해서 만들어보세용!

for-stride

for i in stride(from: 0, through: 8, by: 2) {
    print(i)
}

for-where

for i in 0...8 where i % 2 == 0 {
    print(i)
}

while

var i = 0
while i <= 8 {
    print(i)
    i += 2
}

repeat-while

var i = 0
repeat {
    print(i)
    i += 2
} while i <= 8

5. 한줄 정리

  • 타입 : 스위프트는 타입에 굉장히 예~~~민한 친구 타입을 잘 유의해서 사용하자..
  • 기본 연산자 : 범위 연산자같은 특별한 연산자가 있음 시작 범위가 없거나 끝범위가 없으면 에러가 나거나 무한루프를 돌 수 있음 명심하긔~~
  • 조건문 : 간단한 조건문은 삼항 연산자로 바꿔 쓸 수 있지만 삼항연산자가 너무 복잡해지면 오히려 가독성이 떨어질 수 있으니 주의해야함!!
  • 반복문 : 내가 아는 반복문은 for while 밖에 없는데.. 스위트프는 너무나도 많아요… 조건을 먼저 보고 반복문을 실행하는지 아니면 반복문을 실행하고 조건을 보는지 주의해야할듯!!

타입이 뭔데요(해봅시다^^)

변수, 상수, 함수, 클래스 등등 얘네가 가질 수 있는 형식!

1. Int / UInt

Int

  • 정수 타입 (64비트)

UInt

  • 양의 정수 타입 (64비트)
var someInt: Int = 23
someInt = -5

var someUInt: Int = 23
someUInt = -23 //이렇게 하면 컴파일 오류임
someUInt = someInt //이렇게 해도 타입이 안맞아서 컴파일 오류 겁나게 까다로움...

2. Float / Double

Float

  • 실수 타입 (32비트)

Double

  • 실수 타입 (64비트)
var someFloat: Float = 3.14
someFloat = 45

var someDouble: Double = 161.2
someDouble = 15 
someDouble = someFloat //이것도 컴파일 오류 또 겁나게 까다로움...

3. Character / String

Chatacter

  • 문자 타입 (유니코드 사용)

String

  • 양의 정수 타입 (64비트)
var someCharacter: Character = "A" //Char로 줄여쓸 생각은 안하는지..?너무 길다
someCharacter = "너" //한글도 되지롱~
someCharacter = "🎸"//이모지도 되지롱~
someCharacter = "재밌다" //근데 문자 타입이라 문자열은 안되지롱~~

var someString: String = "오죠사마 마라탕데스~"
someString = someTring + "오냐~" //문자열 합치기 가능~
someString = someCharacter //당연히 까다로우신 swift님께서는 오류를 선사해주심(감사합니다?)

//여러줄 쓰고 싶으면 """쓰면 됨
someString = """
나
사망년이다ㅋㅋ
까불지 말아라
"""

///근데 첫줄, 끝줄에서 줄바꿈 안하면 또 오류로 공격해줄거니까 명심해라~
someString = """
나
사망년이다ㅋㅋ
까불지 말아라"""

5. Bool

  • true / false만을 값으로 가짐
var someBool: Bool = true
someBool = false
someBool = 1 //0과1로는 못받는다,, 

6. Any

  • swift의 모든 타입을 지칭하는 키워드
var someAny: Any = 100
someAny = "아무거나 다 되지롱~"
someAny = 123.34

let someDouble: Double = someAny 

어 그러면 모든 타입 다 되니까 실수 넣어놓고 double형 변수에 넣는거 가능?

⚠️ ㄴㄴ 어림 없지 Cannot convert value of type 'Any' to specified type 'Double' 바로 에러 날림

실수형 자료를 넣더라도 Any가 double 타입은 아니기 때문에 할당 불가 (일단 지금은 이정도면 머리 속에 넣을게요 ㅎㅎ)

7. AnyObject

  • 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass {}

var someAnyObject: AnyObject = SomeClass()

someAnyObject = 123.12 //클래스만 수용가능하기에 에러 날려~ (그만 에러 날려 ㅜㅜ)

[번외] nil

  • 다른 언어에서 null, NULL 과 유사한 없음을 나타내는 키워드
someAny = nil  // 컴파일 오류발생
someAnyObject = nil  // 컴파일 오류발생

'nil' cannot be assigned to type 'AnyObject’ 라고 하는데 **이건 왜 안되는데?

다음에 알아보자~ 일단 안된다는 것만 알고 갑시다

기본 연산자

연산자 종류 나누면 끝도 없이 많은데,, 어디까지 해야하지..? 일단 해봐~

산술 연산자

: 우리가 흔히 쓰는 사칙 연산이라고 생각하면 될 듯!

뭐 다들 너무나도 잘 알거같아서 따로 예제는 안할게요

  • Addition +
  • Subtraction -
  • Multiplication *
  • Division /

나머지 연산자

: 말그대로 나누셈에서 나온 나머지 그 나머지 맞음

print(9%4) //나머지 1 나옴~

논리 연산자

  • Logical Not(!a)
  • 변수명 앞에 느낌표 를 이용해 표현
let allow = false

if !allow { //allow가 거짓이면 조건문 실행
    print("안됩니다~")
}
  • Logical AND(a && b)
  • a와 b 둘 다 만족해야만 true
let isSunny = true
let isWarm = true

if isSunny && isWarm { //둘 다 만족해야됨!
    print("오늘은 날씨가 맑고 따뜻해요!")
} else {
    print("오늘은 날씨가 맑지 않거나 추워요.")
}

  • Logical OR(a || b)
  • a나 b 둘 중 하나만 만족해도 true
let coffee = true
let drink = false

if coffee || drink { //둘 중에 하나만!
    print("커피나 술 중에 하나라도 있어요!")
} else {
    print("커피도 술도 없네요.")
}

삼항 조건 연산자

  • 표현식 : question ? answer1 : answer2
  • 해석하면 question이 true면 answer1 / false면 answer2를 실행한다~

근데 조건문이 뒤에있는데 이걸 먼저 예시로 하는게 맞나??째뜬

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

범위 연산자

: 특정 범위에 대해서 지정할 수 있는 범위 연산자

  • 보통 뒤에서 다룰 반복문에 자주 사용!
  • a…b ⇒ a 이상 b 이하라는 뜻! …이러니까 아련하고 미련해 보인다 막이래..ㅎ
  • a..<b ⇒ a 이상 b 미만
  • …a / a… / ..<a ⇒ 시작과 끝 범위 중 하나만 정해주는 연산자
let array: [Int] = [1, 2, 3, 4, 5]

//0번 인덱스부터 3번 인덱스까지
for element in array[...3] {
    print(element)                    // 1, 2, 3, 4
}
//3번 인덱스부터 끝까지
for element in array[3...] {
    print(element)                    // 4, 5
}
//0번 인덱스부터 2번 인덱스까지
for element in array[..<3] {
    print(element)                    // 1, 2, 3
}

근데 이건 배열일 경우에 무조건 시작 범위가 0번 인덱스라 ㄱㅊ은데

그게 아니라면 저렇게 에러가 나니까 주의~~

또 반대로 이렇게 끝나는 범위가 정해져 있지 않은 경우에는 미친 듯이 무한 루프가 돌아요,,,

조건문

if - else기본 표현식

  • 다른 언어들과 크게 다르지 않음~
if 조건 수식1 {
    실행 코드
}
else if 조건 수식2 {
    실행 코드
}
else if 조건 수식3 {
    실행 코드
}
else {
    실행 코드
}

이미 다들 알겠지만 예제 하나만 해보자~

import Foundation

let cutTree = 10

if cutTree >= 11 {
    print("이제 그만 찍으세요,, 망하셨어요")
} else if  cutTree >= 5 {
    print("이정도면 넘어올 수도?")
} else {
    print("아직 더 찍으셔야할듯~~")
}

열번찍어 안넘어가는 나무 없다? 10번까지만 하세요 ㅎㅎ

제가 설정한 조건문을 보면

  • 11번 이상 찍으면 "이제 그만 찍으세요,, 망하셨어요"를 출력
  • 5 ~ 10까지는 "이정도면 넘어올 수도?"
  • 5번 미만은 "아직 더 찍으셔야할듯~~"을 출력해준다!

switch 기본 표현식

swift 입력 값 {
case 비교 값1 :
    살행 코드
case 비교 값2 :
    실행 코드
    // 이번 case를 마치고 switch 구문을 탈출하지 않음
    fallthrough
case 비교 값3, 비교 값4, 비교 값5 : // 한 번에 여러 값 비교 가능
    실행 코드
    break   // break 키워드의 사용은 선택 사항
default :
    실행 코드
}
let day = "Monday"

switch day {
case "Monday":
    print("이제 월요일입니다.")
case "Tuesday":
    print("아직도 화요일입니다.")
case "Wednesday":
    print("왜 아직도 수요일입니다.")
case "Thursday":
    print("이제야 목요일입니다.")
case "Friday":
    print("드디어 금요일입니다.")
case "Saturday":
    print("토요일입니다.")
case "Sunday":
    print("절망의 일요일입니다.")
default:
    print("유효하지 않은 요일입니다.")
}

  • day에 할당된 값을 기준으로 구문 시작!
  • 각 case에 있는 값과 비교해 코드블록을 돌기 시작하고 일치하면 해당 요일을 출력!!
  • default는 위의 case들이 모두 아니면 실행됨 (if-else에서 else라고 생각하면 좋을듯!)

🔍 조건문과 삼항연산자!!

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

반복문

for - in 구문

for count in 1...5 {
    print(count)
}
  • 1부터 5까지 총 5번 반복할거고 count 변수를 출력하면 이렇게 결과가나옴!

❗️Wildcard Pattern

우선 예제 코드를 먼저 보자

for count in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

문자열이 5번 출력되는건 이제 알겠음!

근데 앞에서는 count에 값을 출력해서 count변수를 활용했지만 이번에는 굳이 반복 상수를 쓸일이 없어짐 ㅜㅜㅜ

코드를 치면 경고가 나오는데

count 변수가 사용된적이 없으니 _로 대체하라는 그 말이 나온다

이게 바로 Wildcard Pattern 임! 밑에는 수정된 코드!

for _ in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

For - in Collection

let list: [String] = ["여러분","제발","집 좀 갑시다..."]

for talk in list{
    print(talk)
}

//출력 결과 :
//여러분
//제발
//집 좀 갑시다...
  • 문자열 배열을 선언하고 출력하는 코드다!
  • list의 원소 개수인 3만큼 반복되고 talk에는 list가 열가되면서 원소 값이 차례대로 하나씩 담김!

For - in Stride

for i in stride(from: 1, to: 10, by: 2) {
    print(i) // 1, 3, 5, 7, 9
  • from, to, by를 통해 시작값, 끝 값 , 간격을 설정할 수 있음!
  • 위에 예시를 보면 1부터 10까지 2씩 증가하는 반복문이라는 걸 알 수 있음!!

For - where

for number in 1...10 where number % 2 != 0 {
    print(number) // 1, 3, 5, 7, 9
}
  • for 키워드 다음에 있는 number가 1부터 10까지 반복 (…은 범위 연산자)
  • where 다음에 있는 조건인 경우에 안에 코드를 실행!

while 구문

var num = 1
var sum = 0

while num <= 100 {
	sum += num
    num += 1
}

print(sum)
  • 완전 간단한 1부터 100까지 합 구하는 프로그램
  • num이 100일 때까지 안에 구문을 반복
    • sum 변수에 num을 넣어줌
    • num이 1씩 증가하도록 선언
    • num이 100보다 크다면 반복문 종료!

repeat 구문

앞에서 만들었던 1부터 100까지 합 구하는 프로그램을 repeat구문으로 바꿔보겠음!!

var num = 0
var sum = 0

repeat {
    sum += num
    num += 1
} while num <= 100

print(sum)
  • repeat 구문은 while 뒤에 조건이 true일 동안 내부의 코드가 실행된다!

❓근데 뭐가 다른데 while문이랑?

다른 예시로 비교를 해볼게요!

var num = 10

while num < 10 {
    num += 1
}

print(num)

var num = 10

repeat {
    num += 1
} while num < 10

print(num)

둘이 같은 조건식 달아줌!! 결과가 어케 나올까요???

1️⃣ while문을 먼저보면

num = 10 인데 조건이 10보다 작을때만 반복문을 실행하기 때문에 반복문을 실행하지 않고바로 num을 출력

2️⃣ repeat문을 보면

num과 조건식이 같아 반복문을 실행을 안할것 같지만?

repeat의 경우 조건식을 나중에 판단하기 때문에 일단 반복문을 실행한 후에 조건식을 판별합니다

그래서 일단 num에 +1을 하게되어 11이 출력됩니다~

둘의 차이를 주의해서 사용해요오 우리~~


키워드 - 타입

  • 아래 코드의 타입을 추론하고, 왜 이렇게 출력되는지 생각해보아요~
  • 만약 pi, grade의 타입을 float, String으로 출력하고 싶으면 어떻게 하면 될까요?
  • hint
  • 타입 안정성, 타입 추론, 타입 명시
let pi = 3.141592 
let grade = "A" 
print(pi) // --- 1
print(grade) // --- 2
let pi = 3.141592
let grade = "A"

print(type(of: pi))    //Double
print(type(of: grade)) //String

swift는 타입에 굉장히 예ㅖ민함,,앞에서 봤던 것 처럼

변수를 선언할 때 타입을 직접 명시해주지 않으면 타입 추론을 통해 타입을 결정함!

let pi = 3.141592
let grade = "A"

print(type(of: Float(pi)))   
print(type(of: Character(grade)))

이렇게 직접 타입을 변환해주어 출력 시에만 원하는 타입의 값으로 사용가능함!!

키워드 - 기본 연산자, 조건문

  • 아래 코드를 삼항연산자를 통해서 표현해보세요!
var myMind: String?
var ifULoveMe: Bool?

//여기서부터
if ifULoveMe {
        myMind = "나도 너 좋아했어!!! 나랑 사귀자!!!"
} else {
        myMind = "나도 너 안 좋아했어! 흥칫뿡야야!!!"
}
//여기까지를 삼항연산자로 표현해주보세여~ 시로요
var myMind: String?
var ifULoveMe: Bool?

myMind = ifULoveMe == true ? "나도 너 좋아했어!!! 나랑 사귀자!!!" : "나도 너 안 좋아했어! 흥칫뿡야야!!!"

print(myMind)

멘트가 하여자인걸

키워드 - 반복문

  • 0,2,4,6,8을 출력하는 구문을 for-stride, for-where, while, repeat-while을 사용해서 만들어보세용!

for-stride

for i in stride(from: 0, through: 8, by: 2) {
    print(i)
}

for-where

for i in 0...8 where i % 2 == 0 {
    print(i)
}

while

var i = 0
while i <= 8 {
    print(i)
    i += 2
}

repeat-while

var i = 0
repeat {
    print(i)
    i += 2
} while i <= 8

5. 한줄 정리

  • 타입 : 스위프트는 타입에 굉장히 예~~~민한 친구 타입을 잘 유의해서 사용하자..
  • 기본 연산자 : 범위 연산자같은 특별한 연산자가 있음 시작 범위가 없거나 끝범위가 없으면 에러가 나거나 무한루프를 돌 수 있음 명심하긔~~
  • 조건문 : 간단한 조건문은 삼항 연산자로 바꿔 쓸 수 있지만 삼항연산자가 너무 복잡해지면 오히려 가독성이 떨어질 수 있으니 주의해야함!!
  • 반복문 : 내가 아는 반복문은 for while 밖에 없는데.. 스위트프는 너무나도 많아요… 조건을 먼저 보고 반복문을 실행하는지 아니면 반복문을 실행하고 조건을 보는지 주의해야할듯!!

타입이 뭔데요(해봅시다^^)

변수, 상수, 함수, 클래스 등등 얘네가 가질 수 있는 형식!

1. Int / UInt

Int

  • 정수 타입 (64비트)

UInt

  • 양의 정수 타입 (64비트)
var someInt: Int = 23
someInt = -5

var someUInt: Int = 23
someUInt = -23 //이렇게 하면 컴파일 오류임
someUInt = someInt //이렇게 해도 타입이 안맞아서 컴파일 오류 겁나게 까다로움...

2. Float / Double

Float

  • 실수 타입 (32비트)

Double

  • 실수 타입 (64비트)
var someFloat: Float = 3.14
someFloat = 45

var someDouble: Double = 161.2
someDouble = 15 
someDouble = someFloat //이것도 컴파일 오류 또 겁나게 까다로움...

3. Character / String

Chatacter

  • 문자 타입 (유니코드 사용)

String

  • 양의 정수 타입 (64비트)
var someCharacter: Character = "A" //Char로 줄여쓸 생각은 안하는지..?너무 길다
someCharacter = "너" //한글도 되지롱~
someCharacter = "🎸"//이모지도 되지롱~
someCharacter = "재밌다" //근데 문자 타입이라 문자열은 안되지롱~~

var someString: String = "오죠사마 마라탕데스~"
someString = someTring + "오냐~" //문자열 합치기 가능~
someString = someCharacter //당연히 까다로우신 swift님께서는 오류를 선사해주심(감사합니다?)

//여러줄 쓰고 싶으면 """쓰면 됨
someString = """
나
사망년이다ㅋㅋ
까불지 말아라
"""

///근데 첫줄, 끝줄에서 줄바꿈 안하면 또 오류로 공격해줄거니까 명심해라~
someString = """
나
사망년이다ㅋㅋ
까불지 말아라"""

5. Bool

  • true / false만을 값으로 가짐
var someBool: Bool = true
someBool = false
someBool = 1 //0과1로는 못받는다,, 

6. Any

  • swift의 모든 타입을 지칭하는 키워드
var someAny: Any = 100
someAny = "아무거나 다 되지롱~"
someAny = 123.34

let someDouble: Double = someAny 

어 그러면 모든 타입 다 되니까 실수 넣어놓고 double형 변수에 넣는거 가능?

⚠️ ㄴㄴ 어림 없지 Cannot convert value of type 'Any' to specified type 'Double' 바로 에러 날림

실수형 자료를 넣더라도 Any가 double 타입은 아니기 때문에 할당 불가 (일단 지금은 이정도면 머리 속에 넣을게요 ㅎㅎ)

7. AnyObject

  • 모든 클래스 타입을 지칭하는 프로토콜
class SomeClass {}

var someAnyObject: AnyObject = SomeClass()

someAnyObject = 123.12 //클래스만 수용가능하기에 에러 날려~ (그만 에러 날려 ㅜㅜ)

[번외] nil

  • 다른 언어에서 null, NULL 과 유사한 없음을 나타내는 키워드
someAny = nil  // 컴파일 오류발생
someAnyObject = nil  // 컴파일 오류발생

'nil' cannot be assigned to type 'AnyObject’ 라고 하는데 **이건 왜 안되는데?

다음에 알아보자~ 일단 안된다는 것만 알고 갑시다

기본 연산자

연산자 종류 나누면 끝도 없이 많은데,, 어디까지 해야하지..? 일단 해봐~

산술 연산자

: 우리가 흔히 쓰는 사칙 연산이라고 생각하면 될 듯!

뭐 다들 너무나도 잘 알거같아서 따로 예제는 안할게요

  • Addition +
  • Subtraction -
  • Multiplication *
  • Division /

나머지 연산자

: 말그대로 나누셈에서 나온 나머지 그 나머지 맞음

print(9%4) //나머지 1 나옴~

논리 연산자

  • Logical Not(!a)
  • 변수명 앞에 느낌표 를 이용해 표현
let allow = false

if !allow { //allow가 거짓이면 조건문 실행
    print("안됩니다~")
}
  • Logical AND(a && b)
  • a와 b 둘 다 만족해야만 true
let isSunny = true
let isWarm = true

if isSunny && isWarm { //둘 다 만족해야됨!
    print("오늘은 날씨가 맑고 따뜻해요!")
} else {
    print("오늘은 날씨가 맑지 않거나 추워요.")
}

  • Logical OR(a || b)
  • a나 b 둘 중 하나만 만족해도 true
let coffee = true
let drink = false

if coffee || drink { //둘 중에 하나만!
    print("커피나 술 중에 하나라도 있어요!")
} else {
    print("커피도 술도 없네요.")
}

삼항 조건 연산자

  • 표현식 : question ? answer1 : answer2
  • 해석하면 question이 true면 answer1 / false면 answer2를 실행한다~

근데 조건문이 뒤에있는데 이걸 먼저 예시로 하는게 맞나??째뜬

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

범위 연산자

: 특정 범위에 대해서 지정할 수 있는 범위 연산자

  • 보통 뒤에서 다룰 반복문에 자주 사용!
  • a…b ⇒ a 이상 b 이하라는 뜻! …이러니까 아련하고 미련해 보인다 막이래..ㅎ
  • a..<b ⇒ a 이상 b 미만
  • …a / a… / ..<a ⇒ 시작과 끝 범위 중 하나만 정해주는 연산자
let array: [Int] = [1, 2, 3, 4, 5]

//0번 인덱스부터 3번 인덱스까지
for element in array[...3] {
    print(element)                    // 1, 2, 3, 4
}
//3번 인덱스부터 끝까지
for element in array[3...] {
    print(element)                    // 4, 5
}
//0번 인덱스부터 2번 인덱스까지
for element in array[..<3] {
    print(element)                    // 1, 2, 3
}

근데 이건 배열일 경우에 무조건 시작 범위가 0번 인덱스라 ㄱㅊ은데

그게 아니라면 저렇게 에러가 나니까 주의~~

또 반대로 이렇게 끝나는 범위가 정해져 있지 않은 경우에는 미친 듯이 무한 루프가 돌아요,,,

조건문

if - else기본 표현식

  • 다른 언어들과 크게 다르지 않음~
if 조건 수식1 {
    실행 코드
}
else if 조건 수식2 {
    실행 코드
}
else if 조건 수식3 {
    실행 코드
}
else {
    실행 코드
}

이미 다들 알겠지만 예제 하나만 해보자~

import Foundation

let cutTree = 10

if cutTree >= 11 {
    print("이제 그만 찍으세요,, 망하셨어요")
} else if  cutTree >= 5 {
    print("이정도면 넘어올 수도?")
} else {
    print("아직 더 찍으셔야할듯~~")
}

열번찍어 안넘어가는 나무 없다? 10번까지만 하세요 ㅎㅎ

제가 설정한 조건문을 보면

  • 11번 이상 찍으면 "이제 그만 찍으세요,, 망하셨어요"를 출력
  • 5 ~ 10까지는 "이정도면 넘어올 수도?"
  • 5번 미만은 "아직 더 찍으셔야할듯~~"을 출력해준다!

switch 기본 표현식

swift 입력 값 {
case 비교 값1 :
    살행 코드
case 비교 값2 :
    실행 코드
    // 이번 case를 마치고 switch 구문을 탈출하지 않음
    fallthrough
case 비교 값3, 비교 값4, 비교 값5 : // 한 번에 여러 값 비교 가능
    실행 코드
    break   // break 키워드의 사용은 선택 사항
default :
    실행 코드
}
let day = "Monday"

switch day {
case "Monday":
    print("이제 월요일입니다.")
case "Tuesday":
    print("아직도 화요일입니다.")
case "Wednesday":
    print("왜 아직도 수요일입니다.")
case "Thursday":
    print("이제야 목요일입니다.")
case "Friday":
    print("드디어 금요일입니다.")
case "Saturday":
    print("토요일입니다.")
case "Sunday":
    print("절망의 일요일입니다.")
default:
    print("유효하지 않은 요일입니다.")
}

  • day에 할당된 값을 기준으로 구문 시작!
  • 각 case에 있는 값과 비교해 코드블록을 돌기 시작하고 일치하면 해당 요일을 출력!!
  • default는 위의 case들이 모두 아니면 실행됨 (if-else에서 else라고 생각하면 좋을듯!)

🔍 조건문과 삼항연산자!!

var soju = 1;//내가 먹을 소주 갯수

if(soju < 2){
    print("아~오늘은 막차타고 간다~") 
}
else { //2병 이상부터?
    print("아~오늘 아무도 집 못가 첫차야~")
}

뭐 soju가 2병 미만이면 막차를 탈 수 있고 2병 이상이면 첫차행이세요^^하는 그런 코드입니다~~ㅎㅎ

이걸 if-else를 쓰지 않고 삼항 조건 연산자로 바꿔보면

var soju = 2;

soju < 2 ? print("아~오늘은 막차타고 간다~") : print("아~오늘 아무도 집 못가 첫차야~")
  • 한줄에 다 때려넣을 수 있음! 이제 소주 2병이셔서 첫차세요^^ㅎㅇㅌ!!
  • 이런 간단한 코드는 줄이 줄어서 간결해지지만 너무 복잡하게 남발하면 오히려 가독성이 떨어질 수 있으니 주의하도록 하자!

반복문

for - in 구문

for count in 1...5 {
    print(count)
}
  • 1부터 5까지 총 5번 반복할거고 count 변수를 출력하면 이렇게 결과가나옴!

❗️Wildcard Pattern

우선 예제 코드를 먼저 보자

for count in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

문자열이 5번 출력되는건 이제 알겠음!

근데 앞에서는 count에 값을 출력해서 count변수를 활용했지만 이번에는 굳이 반복 상수를 쓸일이 없어짐 ㅜㅜㅜ

코드를 치면 경고가 나오는데

count 변수가 사용된적이 없으니 _로 대체하라는 그 말이 나온다

이게 바로 Wildcard Pattern 임! 밑에는 수정된 코드!

for _ in 1...5 {
    print("안녕 나 02 김민서 ㅋㅋ")
}

For - in Collection

let list: [String] = ["여러분","제발","집 좀 갑시다..."]

for talk in list{
    print(talk)
}

//출력 결과 :
//여러분
//제발
//집 좀 갑시다...
  • 문자열 배열을 선언하고 출력하는 코드다!
  • list의 원소 개수인 3만큼 반복되고 talk에는 list가 열가되면서 원소 값이 차례대로 하나씩 담김!

For - in Stride

for i in stride(from: 1, to: 10, by: 2) {
    print(i) // 1, 3, 5, 7, 9
  • from, to, by를 통해 시작값, 끝 값 , 간격을 설정할 수 있음!
  • 위에 예시를 보면 1부터 10까지 2씩 증가하는 반복문이라는 걸 알 수 있음!!

For - where

for number in 1...10 where number % 2 != 0 {
    print(number) // 1, 3, 5, 7, 9
}
  • for 키워드 다음에 있는 number가 1부터 10까지 반복 (…은 범위 연산자)
  • where 다음에 있는 조건인 경우에 안에 코드를 실행!

while 구문

var num = 1
var sum = 0

while num <= 100 {
	sum += num
    num += 1
}

print(sum)
  • 완전 간단한 1부터 100까지 합 구하는 프로그램
  • num이 100일 때까지 안에 구문을 반복
    • sum 변수에 num을 넣어줌
    • num이 1씩 증가하도록 선언
    • num이 100보다 크다면 반복문 종료!

repeat 구문

앞에서 만들었던 1부터 100까지 합 구하는 프로그램을 repeat구문으로 바꿔보겠음!!

var num = 0
var sum = 0

repeat {
    sum += num
    num += 1
} while num <= 100

print(sum)
  • repeat 구문은 while 뒤에 조건이 true일 동안 내부의 코드가 실행된다!

❓근데 뭐가 다른데 while문이랑?

다른 예시로 비교를 해볼게요!

var num = 10

while num < 10 {
    num += 1
}

print(num)

var num = 10

repeat {
    num += 1
} while num < 10

print(num)

둘이 같은 조건식 달아줌!! 결과가 어케 나올까요???

1️⃣ while문을 먼저보면

num = 10 인데 조건이 10보다 작을때만 반복문을 실행하기 때문에 반복문을 실행하지 않고바로 num을 출력

2️⃣ repeat문을 보면

num과 조건식이 같아 반복문을 실행을 안할것 같지만?

repeat의 경우 조건식을 나중에 판단하기 때문에 일단 반복문을 실행한 후에 조건식을 판별합니다

그래서 일단 num에 +1을 하게되어 11이 출력됩니다~

둘의 차이를 주의해서 사용해요오 우리~~


키워드 - 타입

  • 아래 코드의 타입을 추론하고, 왜 이렇게 출력되는지 생각해보아요~
  • 만약 pi, grade의 타입을 float, String으로 출력하고 싶으면 어떻게 하면 될까요?
  • hint
  • 타입 안정성, 타입 추론, 타입 명시
let pi = 3.141592 
let grade = "A" 
print(pi) // --- 1
print(grade) // --- 2
let pi = 3.141592
let grade = "A"

print(type(of: pi))    //Double
print(type(of: grade)) //String

swift는 타입에 굉장히 예ㅖ민함,,앞에서 봤던 것 처럼

변수를 선언할 때 타입을 직접 명시해주지 않으면 타입 추론을 통해 타입을 결정함!

let pi = 3.141592
let grade = "A"

print(type(of: Float(pi)))   
print(type(of: Character(grade)))

이렇게 직접 타입을 변환해주어 출력 시에만 원하는 타입의 값으로 사용가능함!!

키워드 - 기본 연산자, 조건문

  • 아래 코드를 삼항연산자를 통해서 표현해보세요!
var myMind: String?
var ifULoveMe: Bool?

//여기서부터
if ifULoveMe {
        myMind = "나도 너 좋아했어!!! 나랑 사귀자!!!"
} else {
        myMind = "나도 너 안 좋아했어! 흥칫뿡야야!!!"
}
//여기까지를 삼항연산자로 표현해주보세여~ 시로요
var myMind: String?
var ifULoveMe: Bool?

myMind = ifULoveMe == true ? "나도 너 좋아했어!!! 나랑 사귀자!!!" : "나도 너 안 좋아했어! 흥칫뿡야야!!!"

print(myMind)

멘트가 하여자인걸

키워드 - 반복문

  • 0,2,4,6,8을 출력하는 구문을 for-stride, for-where, while, repeat-while을 사용해서 만들어보세용!

for-stride

for i in stride(from: 0, through: 8, by: 2) {
    print(i)
}

for-where

for i in 0...8 where i % 2 == 0 {
    print(i)
}

while

var i = 0
while i <= 8 {
    print(i)
    i += 2
}

repeat-while

var i = 0
repeat {
    print(i)
    i += 2
} while i <= 8

5. 한줄 정리

  • 타입 : 스위프트는 타입에 굉장히 예~~~민한 친구 타입을 잘 유의해서 사용하자..
  • 기본 연산자 : 범위 연산자같은 특별한 연산자가 있음 시작 범위가 없거나 끝범위가 없으면 에러가 나거나 무한루프를 돌 수 있음 명심하긔~~
  • 조건문 : 간단한 조건문은 삼항 연산자로 바꿔 쓸 수 있지만 삼항연산자가 너무 복잡해지면 오히려 가독성이 떨어질 수 있으니 주의해야함!!
  • 반복문 : 내가 아는 반복문은 for while 밖에 없는데.. 스위트프는 너무나도 많아요… 조건을 먼저 보고 반복문을 실행하는지 아니면 반복문을 실행하고 조건을 보는지 주의해야할듯!!