์๋ ํ์ธ์. ์ด๋ฒ์๋ Swift ์ ์ด ํ๋ฆ(Control Flow)์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ ์ด ํ๋ฆ์ ์ฝ๋์ ์คํ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ค์ํ ๊ตฌ๋ฌธ๋ค์ ํฌํจํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฅผ ์ ํ์ฉํ๋ฉด ํจ์จ์ ์ด๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๐ ์ ์ด ํ๋ฆ ์๊ฐ
Swift๋ ๋ค์ํ ์ ์ด ํ๋ฆ ๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค:
- ๋ฃจํ: for-in, while, repeat-while
- ์กฐ๊ฑด๋ฌธ: if, switch, guard
- ์ ์ด ๋ณ๊ฒฝ ๊ตฌ๋ฌธ: break, continue, fallthrough
- ๊ธฐํ: defer, ๊ฐ์ฉ์ฑ ํ์ธ ๋ฑ
์ด๋ฌํ ๊ตฌ๋ฌธ๋ค์ ํตํด ์ฝ๋์ ์คํ ์์๋ฅผ ์ ์ดํ๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฝ๋๋ฅผ ์คํํ๋ฉฐ, ๋ฐ๋ณต ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๐ For-In ๋ฃจํ
for-in ๋ฃจํ๋ ๋ฐฐ์ด, ๋ฒ์, ๋ฌธ์์ด ๋ฑ์ ์ปฌ๋ ์ ์์๋ฅผ ์ํํ ๋ ์ฌ์ฉํฉ๋๋ค.
๋ฐฐ์ด ์ํํ๊ธฐ
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
๋์ ๋๋ฆฌ ์ํํ๊ธฐ
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
print("\(animalName)s have \(legCount) legs")
}
// cats have 4 legs
// ants have 6 legs
// spiders have 8 legs
์ฐธ๊ณ : ๋์ ๋๋ฆฌ๋ ์์๊ฐ ๋ณด์ฅ๋์ง ์์ผ๋ฏ๋ก ์ํ ๊ฒฐ๊ณผ์ ์์๋ ์ ํด์ ธ ์์ง ์์ต๋๋ค.
์ซ์ ๋ฒ์ ์ํํ๊ธฐ
for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
๊ฐ ๋ฌด์ํ๊ธฐ
๊ฐ์ด ํ์ ์์ ๋๋ ์ธ๋๋ฐ(_)๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ฌด์ํ ์ ์์ต๋๋ค:
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// "3 to the power of 10 is 59049"
๋ค์ํ ๋ฒ์ ์ฌ์ฉํ๊ธฐ
// ๋ฐ์ด๋ฆผ ๋ฒ์ ์ฐ์ฐ์(..<)
for tickMark in 0..<60 {
// 0๋ถํฐ 59๊น์ง 60๋ฒ ์คํ
}
// stride ํจ์ ์ฌ์ฉํ๊ธฐ
for tickMark in stride(from: 0, to: 60, by: 5) {
// 0, 5, 10, ..., 55 (5์ฉ ์ฆ๊ฐ, 60์ ํฌํจํ์ง ์์)
}
// ๋ซํ ๋ฒ์์ ํจ๊ป stride ์ฌ์ฉํ๊ธฐ
for tickMark in stride(from: 3, through: 12, by: 3) {
// 3, 6, 9, 12 (3์ฉ ์ฆ๊ฐ, 12 ํฌํจ)
}
๋ฒ์ ์ฐ์ฐ์:
- a...b: a๋ถํฐ b๊น์ง(b ํฌํจ) - ๋ซํ ๋ฒ์
- a..<b: a๋ถํฐ b-1๊น์ง(b ์ ์ธ) - ๋ฐ์ด๋ฆผ ๋ฒ์
- stride(from:to:by:): ํน์ ๊ฐ๊ฒฉ์ผ๋ก ๋ฒ์ ์์ฑ(๋๊ฐ ์ ์ธ)
- stride(from:through:by:): ํน์ ๊ฐ๊ฒฉ์ผ๋ก ๋ฒ์ ์์ฑ(๋๊ฐ ํฌํจ)
๐ While ๋ฃจํ
While
while ๋ฃจํ๋ ์กฐ๊ฑด์ด false๊ฐ ๋ ๋๊น์ง ์ฝ๋ ๋ธ๋ก์ ๋ฐ๋ณต ์คํํฉ๋๋ค:
var square = 0
var diceRoll = 0
while square < 25 {
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
square += diceRoll
if square < board.count {
square += board[square] // ๊ฒ์ํ์ ํจ๊ณผ ์ ์ฉ
}
}
print("Game over!")
while ๋ฃจํ: ์กฐ๊ฑด์ ๋จผ์ ํ์ธํ ํ ์กฐ๊ฑด์ด true๋ฉด ์ฝ๋ ๋ธ๋ก์ ์คํํฉ๋๋ค.
Repeat-While
repeat-while ๋ฃจํ๋ ๋จผ์ ์ฝ๋ ๋ธ๋ก์ ์คํํ ํ ์กฐ๊ฑด์ ํ์ธํฉ๋๋ค:
var square = 0
var diceRoll = 0
repeat {
square += board[square] // ๊ฒ์ํ์ ํจ๊ณผ ์ ์ฉ
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
square += diceRoll
} while square < 25
print("Game over!")
repeat-while ๋ฃจํ: ๋ค๋ฅธ ์ธ์ด์ do-while๊ณผ ์ ์ฌํ๋ฉฐ, ์ฝ๋ ๋ธ๋ก์ ๋จผ์ ์คํํ ํ ์กฐ๊ฑด์ ํ์ธํฉ๋๋ค. ๋ฐ๋ผ์ ์ฝ๋ ๋ธ๋ก์ด ์ต์ ํ ๋ฒ์ ์คํ๋ฉ๋๋ค.
๐ ์กฐ๊ฑด๋ฌธ
If ๊ตฌ๋ฌธ
if ๊ตฌ๋ฌธ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค:
var temperatureInFahrenheit = 30
if temperatureInFahrenheit <= 32 {
print("It's very cold. Consider wearing a scarf.")
} else if temperatureInFahrenheit >= 86 {
print("It's really warm. Don't forget to wear sunscreen.")
} else {
print("It's not that cold. Wear a T-shirt.")
}
Swift 5.9๋ถํฐ๋ if ํํ์์ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ ๋นํ ์ ์์ต๋๋ค:
let weatherAdvice = if temperatureInCelsius <= 0 {
"It's very cold. Consider wearing a scarf."
} else if temperatureInCelsius >= 30 {
"It's really warm. Don't forget to wear sunscreen."
} else {
"It's not that cold. Wear a T-shirt."
}
if ํํ์: Swift 5.9์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก, ์กฐ๊ฑด์ ๋ฐ๋ฅธ ๊ฐ์ ์ง์ ๋ณ์๋ ์์์ ํ ๋นํ ์ ์์ต๋๋ค.
Switch ๊ตฌ๋ฌธ
switch ๊ตฌ๋ฌธ์ ๊ฐ์ ์ฌ๋ฌ ํจํด๊ณผ ๋น๊ตํฉ๋๋ค:
let someCharacter: Character = "z"
switch someCharacter {
case "a":
print("The first letter of the Latin alphabet")
case "z":
print("The last letter of the Latin alphabet")
default:
print("Some other character")
}
// "The last letter of the Latin alphabet"
Swift 5.9๋ถํฐ๋ switch ํํ์๋ ์ง์ํฉ๋๋ค:
let message = switch anotherCharacter {
case "a":
"The first letter of the Latin alphabet"
case "z":
"The last letter of the Latin alphabet"
default:
"Some other character"
}
Swift์ switch ๊ตฌ๋ฌธ์ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ๋ช ์์ fallthrough๊ฐ ์์ต๋๋ค(๊ฐ case ์คํ ํ ์๋์ผ๋ก ๋ค์ case๋ก ๋์ด๊ฐ์ง ์์ต๋๋ค). ๋ํ ๊ฐ case๋ ์ต์ ํ๋์ ์คํ ๊ฐ๋ฅํ ๊ตฌ๋ฌธ์ด ํ์ํฉ๋๋ค.
๋ค์ํ ํจํด ๋งค์นญ
๊ฐ๊ฒฉ ๋งค์นญ:
swift
let approximateCount = 62 switch approximateCount { case 0: print("no") case 1..<5: print("a few") case 5..<12: print("several") case 12..<100: print("dozens of") default: print("many") } // "dozens of"
ํํ ๋งค์นญ:
swift
let somePoint = (1, 1) switch somePoint { case (0, 0): print("Origin") case (_, 0): print("On the x-axis") case (0, _): print("On the y-axis") case (-2...2, -2...2): print("Inside the box") default: print("Outside the box") } // "Inside the box"
๊ฐ ๋ฐ์ธ๋ฉ:
swift
let anotherPoint = (2, 0) switch anotherPoint { case (let x, 0): print("On the x-axis with an x value of \(x)") case (0, let y): print("On the y-axis with a y value of \(y)") case let (x, y): print("Somewhere else at (\(x), \(y))") } // "On the x-axis with an x value of 2"
where ์ ์ฌ์ฉ:
swift
let yetAnotherPoint = (1, -1) switch yetAnotherPoint { case let (x, y) where x == y: print("(\(x), \(y)) is on the line x == y") case let (x, y) where x == -y: print("(\(x), \(y)) is on the line x == -y") case let (x, y): print("(\(x), \(y)) is just some arbitrary point") } // "(1, -1) is on the line x == -y"
ํฉ์ฑ ์ผ์ด์ค:
let someCharacter: Character = "e" switch someCharacter { case "a", "e", "i", "o", "u": print("\(someCharacter) is a vowel") case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z": print("\(someCharacter) is a consonant") default: print("\(someCharacter) is not a vowel or a consonant") } // "e is a vowel"
ํจํด ๋งค์นญ: ๊ฐ์ ๋ค์ํ ํจํด๊ณผ ๋น๊ตํ๋ ๋ฐฉ๋ฒ
์์ผ๋์นด๋ ํจํด(_): ์ด๋ค ๊ฐ์ด๋ ๋งค์นญ๋๋ ํจํด
๊ฐ ๋ฐ์ธ๋ฉ: ๋งค์นญ๋ ๊ฐ์ ์์ ๋ณ์๋ ์์์ ๋ฐ์ธ๋ฉํ๋ ๋ฐฉ๋ฒ
where ์ : ํจํด ๋งค์นญ์ ์ถ๊ฐ ์กฐ๊ฑด์ ์ง์ ํ๋ ๋ฐฉ๋ฒ
ํฉ์ฑ ์ผ์ด์ค: ์ฌ๋ฌ ํจํด์ ํ๋์ case๋ก ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ
๐ ์ ์ด ๋ณ๊ฒฝ ๊ตฌ๋ฌธ
Continue
continue ๊ตฌ๋ฌธ์ ํ์ฌ ๋ฃจํ ๋ฐ๋ณต์ ์ค๋จํ๊ณ ๋ค์ ๋ฐ๋ณต์ ์์ํฉ๋๋ค:
let puzzleInput = "great minds think alike"
var puzzleOutput = ""
let charactersToRemove: [Character] = ["a", "e", "i", "o", "u", " "]
for character in puzzleInput {
if charactersToRemove.contains(character) {
continue
}
puzzleOutput.append(character)
}
print(puzzleOutput)
// "grtmndsthnklk"
continue: ํ์ฌ ๋ฃจํ ๋ฐ๋ณต์ ์ค๋จํ๊ณ ๋ค์ ๋ฐ๋ณต์ผ๋ก ๋์ด๊ฐ๋๋ค.
Break
break ๊ตฌ๋ฌธ์ ์ ์ฒด ์ ์ด ํ๋ฆ ๊ตฌ๋ฌธ์ ์คํ์ ์ฆ์ ์ข ๋ฃํฉ๋๋ค:
// ๋ฃจํ์์ break
let scores = [10, 20, 30, 40, 50]
var sum = 0
for score in scores {
if score > 30 {
break
}
sum += score
}
print(sum) // 60 (10 + 20 + 30)
// switch์์ break
let numberSymbol: Character = "ไธ" // ์ค๊ตญ์ด๋ก 3
var possibleIntegerValue: Int?
switch numberSymbol {
case "1", "ูก", "ไธ", "เน":
possibleIntegerValue = 1
case "2", "ูข", "ไบ", "เน":
possibleIntegerValue = 2
case "3", "ูฃ", "ไธ", "เน":
possibleIntegerValue = 3
default:
break
}
break:
- ๋ฃจํ์์: ๋ฃจํ์ ์คํ์ ์ฆ์ ์ข ๋ฃํ๊ณ ๋ฃจํ ๋ค์ ์ฝ๋๋ก ์ด๋
- switch์์: switch ๊ตฌ๋ฌธ์ ์ฆ์ ์ข ๋ฃ
Fallthrough
Swift์ switch ๊ตฌ๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ case์์ ๋ค์ case๋ก ์๋์ผ๋ก ๋์ด๊ฐ์ง ์์ง๋ง, fallthrough๋ฅผ ์ฌ์ฉํ๋ฉด ๋ช ์์ ์ผ๋ก ๋ค์ case๋ก ๋์ด๊ฐ ์ ์์ต๋๋ค:
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += " a prime number, and also"
fallthrough
default:
description += " an integer."
}
print(description)
// "The number 5 is a prime number, and also an integer."
fallthrough: switch ๋ฌธ์์ ํ์ฌ case ์คํ ํ ๋ค์ case๋ก ์คํ์ ๊ณ์ํฉ๋๋ค.
๐ ๋ผ๋ฒจ์ด ์๋ ๊ตฌ๋ฌธ
๋ณต์กํ ์ ์ด ํ๋ฆ์์๋ ํน์ ๋ฃจํ๋ ์กฐ๊ฑด๋ฌธ์ ์๋ณํ๊ธฐ ์ํด ๋ผ๋ฒจ์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
gameLoop: while square != finalSquare {
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
switch square + diceRoll {
case finalSquare:
// ๊ฒ์ ์ข
๋ฃ
break gameLoop
case let newSquare where newSquare > finalSquare:
// ์ ํจํ์ง ์์ ์ด๋
continue gameLoop
default:
// ์ ํจํ ์ด๋
square += diceRoll
square += board[square]
}
}
print("Game over!")
๋ผ๋ฒจ์ด ์๋ ๊ตฌ๋ฌธ: ๊ตฌ๋ฌธ์ ์๋ณ์๋ฅผ ๋ถ์ฌ break๋ continue ๋ฑ์ ์ ์ด ํ๋ฆ ๋ณ๊ฒฝ ์ ์ด๋ค ๊ตฌ๋ฌธ์ ์ ์ฉํ ์ง ๋ช ์์ ์ผ๋ก ์ง์ ํฉ๋๋ค.
๐ ์ด๋ฅธ ์ข ๋ฃ (Guard)
guard ๊ตฌ๋ฌธ์ ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด ํ์ฌ ์ฝ๋ ๋ธ๋ก์์ ๋น ์ ธ๋๊ฐ๋๋ก ํฉ๋๋ค:
func greet(person: [String: String]) {
guard let name = person["name"] else {
return
}
print("Hello \(name)!")
guard let location = person["location"] else {
print("I hope the weather is nice near you.")
return
}
print("I hope the weather is nice in \(location).")
}
greet(person: ["name": "John"])
// "Hello John!"
// "I hope the weather is nice near you."
guard ๊ตฌ๋ฌธ์ ์ฅ์ :
- ํ์ํ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด ์ผ์ฐ ํจ์๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค.
- ์ต์ ๋ ๋ฐ์ธ๋ฉ์ผ๋ก ํด์ ๋ ๊ฐ์ guard ์ดํ ์ฝ๋์์๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
guard: ํน์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด์ผ ์ดํ ์ฝ๋๋ฅผ ์คํํ๋ฉฐ, ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์์ผ๋ฉด else ๋ธ๋ก์ ํตํด ํ์ฌ ๋ฒ์๋ฅผ ๋น ์ ธ๋๊ฐ๋๋ค.
๐ ์ฐ๊ธฐ๋ ๋์ (Defer)
defer ๋ธ๋ก์ ํ์ฌ ๋ฒ์๊ฐ ์ข ๋ฃ๋ ๋ ์คํ๋ ์ฝ๋๋ฅผ ์ง์ ํฉ๋๋ค:
var score = 1
if score < 10 {
defer {
print(score)
}
score += 5
}
// "6" ์ถ๋ ฅ
์ฌ๋ฌ defer ๋ธ๋ก์ด ์๋ ๊ฒฝ์ฐ ๋ง์ง๋ง์ ์ ์๋ ๋ธ๋ก๋ถํฐ ์ญ์์ผ๋ก ์คํ๋ฉ๋๋ค:
if score < 10 {
defer {
print(score)
}
defer {
print("The score is:")
}
score += 5
}
// "The score is:" ์ถ๋ ฅ
// "6" ์ถ๋ ฅ
defer: ํ์ฌ ๋ฒ์๊ฐ ์ข ๋ฃ๋ ๋ ์คํ๋ ์ฝ๋ ๋ธ๋ก์ ์ ์ํฉ๋๋ค. ์์ ํด์ , ํ์ผ ๋ซ๊ธฐ ๋ฑ ์ ๋ฆฌ ์์ ์ ์ ์ฉํฉ๋๋ค.
๐ API ๊ฐ์ฉ์ฑ ํ์ธ
ํน์ API๊ฐ ์คํ ์ค์ธ iOS/macOS ๋ฒ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค:
if #available(iOS 10, macOS 10.12, *) {
// iOS 10 ์ด์ ๋๋ macOS 10.12 ์ด์์์๋ง ์คํ
} else {
// ์ด์ ๋ฒ์ ์์ ์คํํ ๋์ฒด ์ฝ๋
}
Swift 5.6๋ถํฐ๋ ๋ฐ๋๋ก ํ์ธํ ์๋ ์์ต๋๋ค:
if #unavailable(iOS 10) {
// iOS 10 ๋ฏธ๋ง์์๋ง ์คํ
}
#available: ์ฝ๋๊ฐ ํน์ ํ๋ซํผ ๋ฒ์ ์ด์์์๋ง ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
#unavailable: ์ฝ๋๊ฐ ํน์ ํ๋ซํผ ๋ฒ์ ๋ฏธ๋ง์์๋ง ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๐ ์ ๋ฆฌ
Swift์ ์ ์ด ํ๋ฆ ๊ตฌ๋ฌธ์ ์ฝ๋์ ์คํ ํ๋ฆ์ ํจ์จ์ ์ผ๋ก ์ ์ดํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ํนํ Swift๋ง์ ํน์ง์ ์ธ ์์๋ค์ ์ ๋ฆฌํ์๋ฉด:
- for-in ๋ฃจํ๋ ๋ค์ํ ์ปฌ๋ ์ ๊ณผ ๋ฒ์๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์๊ฒ ํด์ค๋๋ค.
- switch ๊ตฌ๋ฌธ์ ํจํด ๋งค์นญ์ด ๋งค์ฐ ๊ฐ๋ ฅํ๋ฉฐ, ์๋ fallthrough๊ฐ ์์ต๋๋ค.
- guard ๊ตฌ๋ฌธ์ ์กฐ๊ฑด ๊ฒ์ฌ์ ์ด๋ฅธ ์ข ๋ฃ๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ฌ์ค๋๋ค.
- defer ๋ธ๋ก์ ์ฝ๋ ์คํ ๋ฒ์๊ฐ ์ข ๋ฃ๋ ๋ ์ ๋ฆฌ ์์ ์ ๋ณด์ฅํฉ๋๋ค.
- API ๊ฐ์ฉ์ฑ ํ์ธ์ ๋ค์ํ OS ๋ฒ์ ์ ์ง์ํ๋ ์ฑ ๊ฐ๋ฐ์ ํ์์ ์ ๋๋ค.
์ด๋ฌํ ์ ์ด ํ๋ฆ ์์๋ค์ ์ ์ ํ ์กฐํฉํ๋ฉด, ๋ ์์ ํ๊ณ ํจ์จ์ ์ด๋ฉฐ ์ฝ๊ธฐ ์ฌ์ด Swift ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
'๐ฅ Bread Basics > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๊ตฌ์กฐ์ฒด์ ํด๋์ค (Structures and Classes) (0) | 2025.04.11 |
---|---|
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ด๊ฑฐํ (Enumerations) (0) | 2025.04.11 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํด๋ก์ (Closures) (0) | 2025.04.11 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ํจ์ (Functions) (0) | 2025.04.11 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ์ปฌ๋ ์ ํ์ (Collection Types) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๋ฌธ์์ด๊ณผ ๋ฌธ์ (Strings and Characters) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๊ธฐ๋ณธ ์ฐ์ฐ์ (Basic Operators) (0) | 2025.04.10 |
Swift ๊ณต์ ๋ฌธ์ ์ ๋ฆฌ - ๊ธฐ๋ณธ(The Basics)(2/2) (0) | 2025.04.10 |