[πŸ“ iOS TIL] #8 ... 🍎 Swift οΌ† Algorithm πŸ–₯️

TaeUkΒ·2024λ…„ 3μ›” 5일
0

🍎 iOS TIL

λͺ©λ‘ 보기
7/18
post-thumbnail

[level 1] 두 μ •μˆ˜ μ‚¬μ΄μ˜ ν•© - 12912

  • 문제 μ„€λͺ…
    두 μ •μˆ˜ a, bκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ a와 b 사이에 μ†ν•œ λͺ¨λ“  μ •μˆ˜μ˜ 합을 λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•˜μ„Έμš”.
    예λ₯Ό λ“€μ–΄ a = 3, b = 5인 경우, 3 + 4 + 5 = 12μ΄λ―€λ‘œ 12λ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.
문제 풀이

func solution(_ a:Int, _ b:Int) -> Int64 {
    var val: Int = 0
    
    if a < b {
        for i in a...b {
            val += i
        }
    }
    else if b < a {
        for i in b...a {
            val += i
        }
    }
    else {
        return Int64(a)
    }
    
    return Int64(val)
}

맨 처음 문제λ₯Ό 봀을 λ•Œ, μ–΄λ–€ μ‹μœΌλ‘œ ꡬ성할지 κ³ λ―Όν•˜λ‹€ μš°μ„  문제 ν’€μ΄λŒ€λ‘œ λ™μž‘ν•˜λŠ” μœ„ μ½”λ“œλ₯Ό λ§Œλ“€μ—ˆλ‹€. 쑰건문을 μ‚¬μš©ν•˜μ—¬ a와 b의 크기λ₯Ό κ΅¬λΆ„ν•˜μ˜€κ³  그에 λ”°λ₯Έ 연산을 μΆ”κ°€ν•˜μ˜€λ‹€. λ˜ν•œ else λ¬Έμ—λŠ” a와 bκ°€ 동일할 λ•Œμ˜ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€λ‹€.

ν•˜μ§€λ§Œ κΈ°μ‘΄ μ½”λ“œλ₯Ό λ”μš± 효율적으둜 정리해볼 수 μžˆμ„κ±° κ°™μ•„ μ•„λž˜μ˜ μ½”λ“œλ‘œ μˆ˜μ •ν•΄λ³΄μ•˜λ‹€.

문제 풀이

func solution(_ a:Int, _ b:Int) -> Int64 {
    var val: Int = 0
    
    for i in a < b ? a...b : b...a {
            val += i
        }
    
    
    return a == b ? Int64(a) : Int64(val)
}

풀이 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λ©΄μ„œ μ‹ κΈ°ν•œ 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

Swiftμ—μ„œμ˜ for λ¬Έμ—μ„œ μ‚Όν•­μ—°μ‚°μžλ₯Ό ν™œμš©ν•  수 μžˆμ—ˆλ‹€.

for i in a < b ? a...b : b...a {
	~~~
}

기쑴에 μ‚¬μš©ν•˜λ˜ Cμ™€λŠ” 달라 맀우 μ‹ κΈ°ν•˜κ²Œ λŠκ»΄μ‘Œλ‹€. μ•„λ§ˆ 이번 λ¬Έμ œκ°€ μ•„λ‹ˆμ˜€λ‹€λ©΄, λͺ°λžμ„ Swift 문법인 것 κ°™λ‹€.


[level 1] λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 숫자 λ°°μ—΄ - 12910

  • 문제 μ„€λͺ…
    array의 각 element 쀑 divisor둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” 값을 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ 배열을 λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μž‘μ„±ν•΄μ£Όμ„Έμš”.
    divisor둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” elementκ°€ ν•˜λ‚˜λ„ μ—†λ‹€λ©΄ 배열에 -1을 λ‹΄μ•„ λ°˜ν™˜ν•˜μ„Έμš”.
func solution(_ arr:[Int], _ divisor:Int) -> [Int] {
    var val  = arr.filter{ $0 % divisor == 0 }
    
    val.sort(by: <)
    
    return val.last == nil ? [-1] : val
}

이번 λ¬Έμ œλŠ” 생각보닀 μ‰½κ²Œ ν’€λ Έλ‹€. μ•„λ§ˆ filterλ₯Ό ν™œμš©ν•˜μ˜€κΈ°μ— νŽΈν–ˆλ˜ 것 κ°™λ‹€.

μš°μ„  μž…λ ₯κ°’ 쀑 ν•˜λ‚˜μΈ arr 배열값을 divisor으둜 λ‚˜λˆ„μ–΄ 각각의 μš”μ†Œμ˜ λ‚˜λ¨Έμ§€κ°€ 0이 λ˜λŠ” κ²ƒλ§Œ filterλ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ ¬ν•˜μ˜€λ‹€.

그리고 print()λ₯Ό ν™œμš©ν•˜μ—¬ val의 값을 ν™•μΈν•΄λ³΄μ•˜λŠ”λ°, μž…λ ₯κ°’μ˜ μˆœμ„œμ— λŒ€ν•΄ 순차적으둜 μ •λ ¬λ˜μ§€μ•Šμ€ 것을 λ³Ό 수 μžˆμ—ˆλ‹€.

κ·Έλž˜μ„œ 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ sort(by: <)λ₯Ό 톡해 올림차순으둜 μ •λ ¬ν•΄μ£Όμ—ˆκ³ , λ§ˆμ§€λ§‰μœΌλ‘œ μ‚Όν•­μ—°μ‚°μžλ₯Ό ν™œμš©ν•˜μ—¬ 문제 λ§ˆμ§€λ§‰ 쑰건을 μΆ©μ‘±μ‹œμΌœμ£Όμ—ˆλ‹€.


Swift 기초 문법 κ°•μ˜ 정리 πŸ’» #1

Sparta λ‚΄λ°°μΊ μ—μ„œ 제곡된 Swift 기초 문법 κ°•μ˜λ₯Ό λ“£κ³  λͺ¨λ₯΄λŠ” λ‚΄μš©λ§Œ μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

μ•„μ§κΉŒμ§„ μ „λ°˜μ μœΌλ‘œ Cμ—μ„œ 닀룬 λΆ€λΆ„κ³Ό μœ μ‚¬ν•œ 것듀이 λ§Žμ•„ μ‰½κ²Œ λŠκ»΄μ§„λ‹€.

Xcode Playground ν™œμš©ν•˜κΈ°

μ•„λž˜μ˜ μ½”λ“œμ—μ„œ λ³€μˆ˜ ans에 λŒ€ν•΄ 데이터 νƒ€μž…μ„ λ³„λ„λ‘œ 지정해주지 μ•Šμ•˜λ‹€.

func solution(_ a:Int, _ b:Int) -> Int64 {
    var val: Int = 0
    var ans = 100
 
 	~~~
 
 }

그럼 Xcode μ»΄νŒŒμΌλŸ¬κ°€ μ•Œμ•„μ„œ μž…λ ₯된 값에 μ•Œλ§žλŠ” 데이터 νƒ€μž…μ„ μœ μΆ”ν•˜λŠ”λ°, ν•΄λ‹Ή νƒ€μž…μ„ μ•Œκ³  μ‹Άλ‹€λ©΄ λ³€μˆ˜ μœ„μ— "option" ν‚€λ₯Ό λˆ„λ₯΄κ³  마우슀λ₯Ό 올리면 μ•„λž˜μ™€ 같은 κ²°κ³Όλ₯Ό λ³Ό 수 μžˆμ„ 것이닀.

Swift의 νŠΉμ§• πŸ”

μ•ˆμ „μ„± πŸ”§

  • νƒ€μž…μ— 엄격
    (= Type Safeν•œ μ–Έμ–΄)

    μ•žμ„œ λͺ‡ 일간 Swiftλ₯Ό μ‚¬μš©ν•˜μ—¬ μ½”λ”©ν…ŒμŠ€νŠΈ λ¬Έμ œλ“€μ„ ν’€μ–΄λ³΄μ•˜λŠ”λ°, 항상 λŠλ‚€ 점 쀑 ν•˜λ‚˜κ°€ 데이터 νƒ€μž…μ— λŒ€ν•΄ μ—„κ²©ν•˜μ—¬ νƒ€μž… λ³€ν™˜κ³Ό μΌμΉ˜μ— 신경을 많이 μ“Έ 수 밖에 μ—†μ—ˆλ‹€...

  • nil(빈 값을 의미)에 엄격

    • 컴파일 μ‹œ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλŠ” nil 객체λ₯Ό λ§Œλ“€κ±°λ‚˜ μ‚¬μš©ν•  수 μ—†μŒ
    • λ§Œμ•½ nil을 μ‚¬μš©ν•  경우 ?λͺ¨μ–‘μ˜ μ˜΅μ…”λ„(Optional)을 μ΄μš©ν•˜μ—¬ ν‘œμ‹œ

ν”„λ‘œνΌν‹°, 좜λ ₯κ³Ό ν•¨μˆ˜

μ—°μ‚° ν”„λ‘œνΌν‹° (Computed Property)

μ—°μ‚° ν”„λ‘œνΌν‹°λŠ” κ·Έ λ•Œ κ·Έ λ•Œ κ³„μ‚°ν•œ 값을 μ•Œλ €μ£ΌκΈ° λ•Œλ¬Έμ— varλ₯Ό μ‚¬μš©ν•˜λ©°, 맀번 값을 μ—°μ‚°ν•˜μ—¬ ν™œμš©ν•˜κΈ° λ•Œλ¬Έμ— νŠΉμ • 값을 μ €μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

var x = 10
var y = 20
var z = 0

var sum: Int {
    get {
        return x + y
    }
    set {
        z = x + y
    }
}

print(sum)
// 좜λ ₯κ°’: 30


var sum1: Int {
		return x + y
}

var sum2: Int {
		x + y
}

그리고 getκ³Ό set 쀑 get만 ν•„μš”ν•œ κ²½μš°μ—λŠ” ν‚€μ›Œλ“œ μƒλž΅ κ°€λŠ₯ν•˜λ©°, return을 μ§€μš°κ³  μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‚˜ μˆ˜μ‹μ΄ ν•œ 쀄일 κ²½μš°μ—λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.

멀티라인 ν…μŠ€νŠΈ

μ—¬λŸ¬ μ€„μ˜ ν…μŠ€νŠΈλ₯Ό String으둜 μ €μž₯ν•  λ•Œ, μ•„λž˜μ™€ 같은 방법을 ν™œμš©ν•  수 μžˆλ‹€.

var greeting =  """
				Hello 
				World 
				 🌍 
				"""

문자 보간법

λ¬Έμžμ—΄ 내에 λ³€μˆ˜λ‚˜ μƒμˆ˜μ˜ 값을 λ‚˜νƒ€λ‚΄κ³  싢을 λ•Œ μ‚¬μš©ν•˜λ©°, ( ) λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

let height = 185
let myInfo = "My height is \(height) 🌍"  
// 좜λ ₯κ°’: My height is 185 🌍

ν•¨μˆ˜

Swiftμ—μ„œλŠ” ν•¨μˆ˜λ„ ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ 취급될 수 μžˆλ‹€!

μ΄λŸ¬ν•œ 점을 ν™œμš©ν•˜μ—¬ λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•˜κ±°λ‚˜, λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

λ©”μ„œλ“œλž€? ν•¨μˆ˜μ™€ λ©”μ„œλ“œμ˜ μ°¨μ΄λŠ”?

ν•¨μˆ˜(Function)와 λ©”μ„œλ“œ(Method)λŠ” μœ μ‚¬ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ§€λ§Œ λͺ‡ 가지 차이점이 μžˆλ‹€.

  • μ •μ˜μ™€ μ†Œμ†μ„±
  • ν•¨μˆ˜
    : λ…λ¦½μ μœΌλ‘œ μ •μ˜λ˜λ©° 일반적으둜 μ „μ—­ λ²”μœ„μ—μ„œ μ •μ˜λ˜κ±°λ‚˜ νŠΉμ • λ²”μœ„ 내에 λ‚΄μž₯

  • λ©”μ„œλ“œ
    : 클래슀, ꡬ쑰체, μ—΄κ±°ν˜• λ“±μ˜ νŠΉμ •ν•œ νƒ€μž…μ— 속해 있고, ν•΄λ‹Ή 객체의 νŠΉμ •ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

  • 호좜 방식
  • ν•¨μˆ˜
    : μ§μ ‘μ μœΌλ‘œ 호좜
addNumbers(5, 3)
// ν•¨μˆ˜ 이름 뒀에 κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 호좜
  • λ©”μ„œλ“œ
    : ν•΄λ‹Ήν•˜λŠ” 객체 λ˜λŠ” νƒ€μž…μ— λŒ€ν•΄ 호좜
myObject.increment()
// 객체 λ˜λŠ” νƒ€μž… μΈμŠ€ν„΄μŠ€ 뒀에 λ©”μ„œλ“œ 이름을 호좜
  • μ†Œμ†μ„±
  • ν•¨μˆ˜
    : ν•¨μˆ˜λŠ” νŠΉμ •ν•œ 객체의 μ†μ„±μ΄λ‚˜ μƒνƒœμ— μ ‘κ·Όν•  수 μ—†κ³ , 주어진 λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„λ“€μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  값을 λ°˜ν™˜ν•˜λŠ”λ° 집쀑

  • λ©”μ„œλ“œ
    : 객체 λ˜λŠ” νƒ€μž…μ˜ 속성에 μ§μ ‘μ μœΌλ‘œ μ ‘κ·Όν•  수 있고, ν•΄λ‹Ή 객체의 μƒνƒœλ₯Ό λ³€κ²½ν•˜κ±°λ‚˜ 속성에 μ ‘κ·Όν•˜μ—¬ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

간단 정리 ☝️

ν•¨μˆ˜λŠ” νŠΉμ •ν•œ νƒ€μž…μ— μ†ν•˜μ§€ μ•ŠμœΌλ©° λ…λ¦½μ μœΌλ‘œ μ •μ˜λ˜κ³  호좜

λ©”μ„œλ“œλŠ” νŠΉμ •ν•œ νƒ€μž…μ— 속해 있으며, ν•΄λ‹Ή νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•΄ μž‘λ™ν•˜κ³  μƒνƒœλ₯Ό λ³€κ²½ν•  수 μžˆλŠ” ν•¨μˆ˜

ν•¨μˆ˜ κΈ°λ³Έ ν˜•νƒœ

func ν•¨μˆ˜_이름(μ•„κ·œλ¨ΌνŠΈ_λ ˆμ΄λΈ”: νŒŒλΌλ―Έν„°_νƒ€μž…) -> 리턴_νƒ€μž… {
  // ... μ½”λ“œ
}
// 넀이밍 μ»¨λ²€μ…˜μœΌλ‘œ μΉ΄λ©œμΌ€μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€ (ex- methodName πŸ™† / method_name πŸ™…)

ex) 
func sayHi(friend: String) {
  print("Hi~ \(friend)!")
}

sayHi(friend: "영호")
// ν•¨μˆ˜μ˜ μ‚¬μš©

참고자료 : ν‘œκΈ°λ²• - μŠ€λ„€μ΄ν¬ μΌ€μ΄μŠ€, 파슀칼 μΌ€μ΄μŠ€, 카멜 μΌ€μ΄μŠ€

func sayHi(to friend: String) {
  print("Hi~ \(friend)!")
}
sayHi(to: "영호")
// "to: " -> 호좜 μ‹œμ μ— friend μ‚¬μš©

func sayHi(_ friend: String) -> String {
  return ("Hi~ \(friend)!")
}
print(sayHi("영호"))
// 


// 좜λ ₯κ°’: Hi~ 영호!

Swift 기초 문법 κ°•μ˜ 정리 πŸ’» #2

데이터 νƒ€μž…

Float

μ†Œμˆ˜μ μ„ ν‘œν˜„ν•˜λŠ” 데이터 νƒ€μž…μœΌλ‘œ, μ†Œμˆ˜μ  μ΄ν•˜ 6자리(32λΉ„νŠΈ 뢀동 μ†Œμˆ˜)κΉŒμ§€ ν‘œν˜„ κ°€λŠ₯ν•˜λ‹€.

Double

μ†Œμˆ˜μ μ„ ν‘œν˜„ν•˜λŠ” 데이터 νƒ€μž…μœΌλ‘œ, μ†Œμˆ˜μ  μ΄ν•˜ 15자리(64λΉ„νŠΈ 뢀동 μ†Œμˆ˜) 이상 ν‘œν˜„ κ°€λŠ₯ν•˜λ‹€.

String

μ•„λž˜μ˜ String을 μ„ μ–Έν•˜λŠ” 방법 이외에

var emptyString: String = "" 

μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ String을 μ‚¬μš©ν•  수 μžˆλ‹€.

var anotherEmptyString = String() 

Tuple

μ—¬λŸ¬ 값을 ν•˜λ‚˜λ‘œ κ·Έλ£Ήν™”ν•œ 데이터 νƒ€μž…μ΄λ‹€.

let http404Error: (Int, String) = (404, "Not Found")


let (justTheStatusCode, _): (Int, String) = http404Error
print("The status code is \(justTheStatusCode)")
// (justTheStatusCode, _) -> (Int, String)
// justTheStatusCode -> Int, _ -> String
// _ => μ‚¬μš©ν•˜μ§€ μ•ŠμŒ
// λ”°λΌμ„œ Int νƒ€μž…μ˜ justTheStatusCode만 μ‚¬μš©


http404Error.0
http404Error.1
// νŠœν”Œμ— μ €μž₯된 κ°’μ˜ μˆœμ„œλ₯Ό ν™œμš©ν•˜μ—¬ μ €μž₯된 데이터에 μ ‘κ·Ό


let http200Status: (Int, String) = (statusCode: 200, description: "OK")
// νŠœν”Œ λ‚΄ 각 μš”μ†Œλ§ˆλ‹€ 이름을 지정해쀄 수 있음

μœ„ μ˜ˆμ‹œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ κ΄€λ ¨μ„± μžˆλŠ” 2~3개 μ •λ„μ˜ 데이터λ₯Ό λ¬Άμ–΄μ„œ μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•˜λ‹€.

Any

λ‹€μ–‘ν•œ 데이터 νƒ€μž…μ˜ 값을 μˆ˜μš©ν•  수 μžˆλŠ” 데이터 νƒ€μž…μ΄λ‹€.

var anyArray: [Any] = [1,"Hi", true]

var anyValue: Any = 1000
anyValue = "μ–΄λ–€ νƒ€μž…λ„ 수용 κ°€λŠ₯"
anyValue = 12345.67

// 컴파일 μ—λŸ¬
let doubleValue: Double = anyValue
// Any 데이터 νƒ€μž…μ΄ Double을 ν¬ν•¨ν•˜λŠ” λ”μš± 포괄적인 κ°œλ…μ΄λ‹ˆ λ¬Έμ œκ°€ λ°œμƒν•¨

Any 데이터 ν˜•μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ ν˜• λ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€!!

Swifμ—μ„œμ˜ νƒ€μž…

  • κΈ°λ³Έ 데이터 νƒ€μž… (Built-in Data Types)
    : ν•΄λ‹Ή 데이터 νƒ€μž…μ€ λͺ¨λ‘ ꡬ쑰체둜 κ΅¬ν˜„λ˜μ–΄ 있음
  • Int: μ •μˆ˜ νƒ€μž…
  • UInt: λΆ€ν˜Έ μ—†λŠ” μ •μˆ˜ νƒ€μž…
  • Float: 단정도 뢀동 μ†Œμˆ˜μ  숫자 νƒ€μž…
  • Double: 배정도 뢀동 μ†Œμˆ˜μ  숫자 νƒ€μž…
  • Bool: λΆˆλ¦¬μ–Έ νƒ€μž…
  • String: λ¬Έμžμ—΄ νƒ€μž…
  • Character: 단일 문자 νƒ€μž…
  • μ‚¬μš©μž μ •μ˜ 데이터 νƒ€μž… (Custom Data Types)
    : ν•΄λ‹Ή 데이터 νƒ€μž…μ€ κ°œλ°œμžκ°€ 직접 νƒ€μž…μ„ μ •μ˜
  • ꡬ쑰체(Structures): 멀버 λ³€μˆ˜μ™€ λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” νƒ€μž…
  • 클래슀(Classes): 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μ°Έμ‘° νƒ€μž…
  • μ—΄κ±°ν˜•(Enumerations): κ΄€λ ¨λœ κ°’λ“€μ˜ 그룹을 μ •μ˜ν•˜λŠ” νƒ€μž…
  • ν”„λ‘œν† μ½œ(Protocols): νŠΉμ • μž‘μ—… λ˜λŠ” κΈ°λŠ₯에 λŒ€ν•œ λ©”μ„œλ“œ, 속성 및 μš”κ΅¬ 사항을 μ •μ˜ν•˜λŠ” νƒ€μž…

μ‚¬μš©μž μ •μ˜ 데이터 νƒ€μž…μ— λŒ€ν•΄μ„œλŠ” λͺ‡ 번 더 읽어보기!! πŸ₯²

Swiftμ—μ„œμ˜ 데이터 νƒ€μž…

νƒ€μž… μ•ˆμ •μ„±

Swiftμ—μ„œ 데이터 νƒ€μž…μ„ μ—„κ²©ν•˜κ²Œ λΆ„λ₯˜ν•˜κΈ° λ•Œλ¬Έμ—, μ½”λ“œ μž‘μ„± μ‹œ 데이터 νƒ€μž…μ„ λͺ…ν™•ν•˜κ²Œ μ‚¬μš©ν•˜κ²Œ λœλ‹€. λ˜ν•œ μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…λΌλ¦¬μ˜ 연산이 λΆˆκ°€λŠ₯ν•˜κΈ°μ— νƒ€μž… μ•ˆμ •μ„±μ΄ 맀우 λ†’λ‹€!

νƒ€μž… ν˜•λ³€ν™˜

λ§Œμ•½ λ‹€λ₯Έ 데이터 νƒ€μž…μ˜ λ³€μˆ˜λ“€μ„ λ”ν•˜κ±°λ‚˜ λΉΌλŠ” λ“±μ˜ μ—°μ‚°ν•˜κ³  μ‹Άλ‹€λ©΄, ν•˜λ‚˜μ˜ ν†΅μΌλœ 데이터 νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ„ ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

let val1: Int = 10
let val2: Double = 10.0

val1 + Int(val2)
// Double ν˜•μ˜ val2λ₯Ό Int ν˜•μœΌλ‘œ λ³€ν™˜

Swift 기초 문법 κ°•μ˜ 정리 πŸ’» #3

μ—°μ‚°μž, 쑰건문과 반볡문

주의점

SwiftλŠ” 띄어쓰기도 신경써야 ν•˜λŠ” 언어이닀!

a - b
// a λΉΌκΈ° b

a -b
// a와 -b

컴파일 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 띄어쓰기λ₯Ό μ£Όμ˜ν•˜μž!! 🚨

switch

μ‚¬μš© 방법은 C와 맀우 μœ μ‚¬ν•˜μ˜€μ§€λ§Œ, λͺ‡ 가지 차이점이 μžˆμ–΄ μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

  • λͺ¨λ“  μΌ€μ΄μŠ€κ°€ μ μš©λ˜μ§€ μ•ŠλŠ” 경우의 μ‹€ν–‰λ˜λŠ” defaultλŠ” 항상 λ§ˆμ§€λ§‰μ— ν‘œμ‹œ

  • fallthrough
    switch 쑰건 쀑 νŠΉμ • μΌ€μ΄μŠ€μ— ν•΄λ‹Ήλ˜μ–΄ ν•΄λ‹Ή ꡬ문이 μ‹€ν–‰λœ λ’€, λ‹€μŒ μΌ€μ΄μŠ€ λΈ”λŸ­μ„ μ‹€ν–‰

var number = 5

switch number {
case 5:
    print("5")
    fallthrough 
    // ν•΄λ‹Ή μΌ€μ΄μŠ€μ˜ ꡬ문이 μ‹€ν–‰λœ 이후에도 무쑰건 λ‹€μŒλΈ”λŸ­μ„ 싀행함
default:
    print("default")
}
// 좜λ ₯ κ²°κ³Ό 
// 5
// default
  • μ—΄κ±°ν˜•(enum)κ³Ό ν•¨κ»˜ μ‚¬μš©
enum Day {
    case monday, tuesday, wednesday, thursday, friday, saturday, sunday
}

func activities(for day: Day) {
    switch day {
    case .monday:
        print("μ›”μš”μΌ: νšŒμ‚¬ 회의")
    case .tuesday:
        print("ν™”μš”μΌ: μš΄λ™ κ°€κΈ°")
    case .wednesday:
        print("μˆ˜μš”μΌ: μ±… 읽기")
    case .thursday:
        print("λͺ©μš”일: μΉœκ΅¬μ™€ λ§Œλ‚˜κΈ°")
    case .friday:
        print("κΈˆμš”μΌ: μ˜ν™” 보기")
    case .saturday:
        print("ν† μš”μΌ: μ‡Όν•‘ν•˜κΈ°")
    case .sunday:
        print("μΌμš”μΌ: κ°€μ‘±κ³Ό μ‹œκ°„ 보내기")
    }
}

activities(for: .monday)
activities(for: .friday)

μ—΄κ±°ν˜• enum의 μ‚¬μš©ν•œλ‹€λŠ” 점은 μ΄ν•΄ν–ˆμœΌλ‚˜, enum 이것을 처음 λ΄μ„œ 아직 뭔지 λͺ¨λ₯΄κ² λ‹€...

for

배열을 ν™œμš©ν•˜μ—¬ μ½”λ“œλ₯Ό ꡬ성할 수 있고, μ•„λž˜μ˜ μ˜ˆμ‹œμ²˜λŸΌ μ‚¬μš©ν•  수 μžˆλ‹€!

let students = ["Tom": 2, "Harry": 4, "Sarah": 1]

for (name, grade) in students {
  print("\(name) 은 \(grade) 학년이야")
}

// 좜λ ₯κ°’: 
// Tom 은 2 학년이야
// Harry 은 4 학년이야
// Sarah 은 1 학년이야

0개의 λŒ“κΈ€