โป ๋ณธ ํฌ์คํ ์ Swift ๊ณต์๋ฌธ์ The Swift Programming Language ์ค A Swift Tour ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ฐ ์ง์ ์ ๋ฆฌํ ์ค์ํํธ ๋ฌธ๋ฒ์ ๊ดํ ๊ธ์ ๋๋ค.
Swift ์ธ์ด์ ๋ํด ์์ ๋ชจ๋ฅด๋ ์ํ์์ ์ ์ ๊ธ์ ๋๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๋ค๋ฃฌ ์ ์ ์์ง๋ง Swift๋ ์ฒ์์ด๋ผ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๊ณ ์ฐจ๊ทผ์ฐจ๊ทผํด๋ณด๋ ์ค์ ๋๋ค. ์ ๊ฐ ์ฝ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ์ ์๋ต๋ ์๋ ์์ผ๋ฉฐ ๊ณต์๋ฌธ์์์ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ์ถ๊ฐํด์ ์ ์ ์๋ ์์ต๋๋ค.
A Swift Tour๋ ๊ณต์๋ฌธ์ ๊ฐ์ฅ ์ด๋ฐ๋ถ์ ์์นํด ์ดํ ๊ณต์๋ฌธ์์์ ๋ค๋ฃจ๋ ๋ด์ฉ์ ๊ฐ๊ฒฐํ๊ฒ ์๊ฐํ๋ ์ฑํฐ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ์ ์ง์ ์ฝ์ด๋ณธ ๋ฐ๋ก๋ ์๋นํ ๋ถ์น์ ํ๊ฒ ์ ํ์์ต๋๋ค. ์ ๋ ๊ณต์๋ฌธ์๋ฅผ ๋ค ์ฝ๊ณ ์ด ๋ถ๋ถ์ ๋ณด๋ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ์์๋ธ ์ ๋ณด๋ง ์ ํ์๋ค๋ ์ฌ์ค์ ์๋ ค๋๋ฆฝ๋๋ค.
< ์๋ก >
print("Hello, world!")
Swift ์ธ์ด๋ ์ ์ถ๋ ฅ "Hello, World" ๋ผ๋ ๋ฌธ์ฅ์ print ํ๊ธฐ๊น์ง ํ ์ค์ด๋ฉด ๋๋ค๋ ๋ฌธ์ฅ์ผ๋ก ๊ธ์ด ์์๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด์ Swift์ ํน์ง์ด๋ฉด์ ์ฅ์ ์ ๋์ดํฉ๋๋ค.
1. input/output์ด๋ string์ ๋ค๋ฃจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตณ์ด importํ ํ์๊ฐ ์๋ค. (C์ธ์ด๋ฅผ ์ ๊ฒฉํ๋ ๋ฏ ์ถ๋ค.)
2. ์ ์ญ ๋ฒ์์์ ์ฐ์ธ ์ฝ๋๋ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ C์ฒ๋ผ main() ํจ์๋ฅผ ์ฐ์ง ์์๋ ๋๋ค.
3. No semicolons -> ์ผ์ผ์ด ์ธ๋ฏธ์ฝ๋ก ์ ๋ฌธ์ฅ ๋์ ์ ๋ถ์ฌ๋ ๋จ.
์ด๋ ๊ฒ ๋ค๋ฅธ ์ธ์ด๋ฅผ ๊น๋ฉด์ ์ค์ํํธ์ ์ฅ์ ์ ๋งํ๊ณ , ์ด Tour๋ ์๊ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด๋ฅผ ์ดํดํ ํ์๋ ์๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ํด์ค๋๋ค.
< 1. Simple Values >
a. Constants and Variables
var myVariable = 42
myVariable = 50
let myConstant = 42
1. let ์ ์์(constant), var ์ ๋ณ์(variable)๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
2. The value of a constant doesn’t need to be known at compile time, but you must assign it a value exactly once. This means you can use constants to name a value that you determine once but use in many places.
→ ๋ณธ๋ฌธ์์ ๊ทธ๋๋ก ๋ฐ์ทํ ๋ ๋ฌธ์ฅ์ ๋๋ค. ์ ๋ ์ฌ๊ธฐ์๋ถํฐ ์ดํด๊ฐ ์ ์ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ์ ๊ฐ ์ดํดํ ๋ด์ฉ์ ์ ์ด๋ณด๊ฒ ์ต๋๋ค.
- ์์๋ ๊ฐ์ด ํ ๋ฒ ํ ๋น๋๋ฉด ๋ณ๊ฒฝํ ์ ์๋ ๋ณ์๋ฅผ ์๋ฏธํ๋ค.
- ์ฒซ ๋ฌธ์ฅ์์ ๋ฒ์ญํ๋ฉด ์์์ ๊ฐ์ด ์ปดํ์ผ ์๊ฐ์ ๊ฒฐ์ ๋ ํ์๊ฐ ์๋ค๋ ๋ป์ด๋ค. → ์ด๋ ์์์ ๊ฐ์ด ๋ฐํ์์์ ๊ฒฐ์ ๋ ์ ์๋ค๋ ๋ป์ด๋ค.
let pi: Double = 3.14159265359
- ์์ ๊ฐ์ด pi ์ ๊ฐ์ ์ปดํ์ผ๋ฌ๊ฐ ์์๋ฅผ ์ ์ธํ ๋ ์๊ณ ์์ง๋ง, ์์์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๊ธฐ์ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ฐํ์์ ๊ฐ์ ๊ณ์ฐํ ์ ์๋ค.
- ๊ทธ๋ ๊ธฐ์ (๋ ๋ฒ์งธ ๋ฌธ์ฅ) ์์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ํ ๋ฒ ๊ฒฐ์ ํ๊ณ ํ์ํ ๋๋ง๋ค ์ฌ์ฉํ ์ ์๋ค.
- ์ฌ๊ธฐ์ ์ฃผ์ํด์ผ ํ ๊ฒ์ ๊ฐ์ ํ ๋นํ๋ ๊ฒ๊ณผ ์ปดํ์ผ ์์ ์ ๊ฐ์ ์์์ผ ํ๋ ๊ฒ์ ์๋ก ๋ค๋ฅธ ๊ฐ๋ ์ด๋ผ๋ ๊ฑฐ๋ค. ๋ฐ๋ผ์ ๋ฐํ์์ ๊ฐ์ ํ ๋นํ๋๋ผ๋ ์ปดํ์ผ๋ฌ๋ ์ด๋ฅผ ์ธ์ํ ์ ์๋ค.
- ์๋๋ ์์๊ฐ ๋ฐํ์์ ๊ฐ์ ํ ๋นํ๋ ๊ฒฝ์ฐ์ด๋ค.
let currentTime = Date()
- ์ด์ ๊ฐ์ด ํ์ฌ ์๊ฐ์ ๋ํ๋ด๋ ์์๋ฅผ ์ ์ธํ ๋๋ ์ปดํ์ผ ์๊ฐ์๋ ํ์ฌ ์๊ฐ์ ์ ์ ์์ผ๋ฏ๋ก ๋ฐํ์์ ๊ฐ์ ํ ๋นํ๊ฒ ๋๋ค.
- ์ด ๊ฒฝ์ฐ let ์ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ ์ธํ์์ง๋ง, ๋ฐํ์์ ํ์ฌ ์๊ฐ์ด ํ ๋น๋๋ฏ๋ก ์ดํ์๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
3. ์์ ๋๋ ๋ณ์๋ ํ ๋นํ๋ ค๋ ๊ฐ๊ณผ ๋ฐ๋์ ๋์ผํ ํ์ ์ด์ด์ผ ํ๋ค. ํ์ง๋ง ํญ์ ํ์ ์ ๋ช ์ํด์ผ ํ๋ ๊ฒ์ ์๋๋ค.
- ์์๋ ๋ณ์๋ฅผ ๋ง๋ค ๋ ๊ฐ์ ์ ๊ณตํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๊ทธ๊ฒ์ ํ์ ์ ์ถ๋ก ํ๋ค. ํ์ง๋ง ์ด๊ธฐ๊ฐ์ด ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์๋๋ค๋๊ฐ, ์ด๊ธฐ๊ฐ์ด ์๋ค๋ฉด ํ์ ์ ๋ช ์ํด์ผ ํ๋ค.
- ๋ณ์๋ ์์ ๋ค์ : ์ ๋ถ์ฌ์ ๋ฐ์ดํฐ ํ์ ๋ช ์
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
- ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด, ์ธ ๋ฒ์งธ explicitDouble์ Double์ด๋ผ๊ณ ๋ช ์ํ์ง ์์๋ค๋ฉด ์ปดํ์ผ๋ฌ๊ฐ Integer๋ก ์ฐฉ๊ฐํ ์ ์๋ค. ์ด๋ด ๊ฒฝ์ฐ ์ด๊ธฐ๊ฐ์ด ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ๋ฐ์ดํฐ ํ์ ์ ๋ช ์ํ ํ์๊ฐ ์๋ค.
b. Data types
1. ๊ฐ์ ํ์ ์ ๋ค๋ฅธ ํ์ ์ผ๋ก ์์์ ์ผ๋ก ๋ณํํ์ง ์๋๋ค(implict conversion X), ๋ง์ฝ ๊ฐ์ ํ์ ์ ๋ฐ๊ฟ ํ์๊ฐ ์๋ค๋ฉด, ๋ช ์์ ์ผ๋ก ์ํ๋ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. (explicit conversion O)
- ์ฌ๊ธฐ์ implicit conversion์ ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ํ์ ์ ๋ณํํด ์ฃผ๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด Swift์์ ์ ์์ ์ค์๋ ๋ค๋ฅธ ํ์ ์ผ๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์, ์ ์์ ์ค์๋ฅผ ์ฐ์ฐํ๋ฉด ์ปดํ์ผ๋ฌ๋ ์๋์ผ๋ก ์ ์๋ฅผ ์ค์๋ก ๋ณํํด ์ค๋ค.
- explicit conversion์ ์ฝ๋ ์์ฑ์๊ฐ ์ง์ ํ์ ์ ๋ณํํด ์ฃผ๋ ๊ฒ์ด๋ค.
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
- ์ฌ๊ธฐ์ String(width)๋ Int ํ์ ์ธ width ๋ณ์๋ฅผ String ํ์ ์ผ๋ก ๋ช ์์ ์ผ๋ก ๋ณํํ ๊ฒ์ด๋ค.
- ์ด๋ ๊ฒ ์์ฑ๋ String ์ธ์คํด์ค๊ฐ widthLabel ์์์ ํ ๋น๋๋ค.
- ์ ์์์์ String์ ์์ ๊ณ ๊ทธ๋ฅ label๊ณผ width๋ฅผ ๋ํ๋ ค๊ณ ํ๋ฉด ์ด๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Binary operator '+' cannot be applied to operands of type 'String' and 'Int'
Overloads for '+' exist with these partially matching parameter lists: (Int, Int), (String, String)
- ๋ค๋ฅธ ํ์ ์ ๋ ๊ฐ๋ฅผ ์ปดํ์ผ๋ฌ ๋ด์์ ๋ณํ์์ผ ๊ณ์ฐํ ์ ์์์ ์ค๋ฅ๋ฅผ ํตํด ์ ์ ์๋ค.
2. String ํ์ ์ผ๋ก ๋ง๋๋ ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ \( ) ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
3. (""") three double quotation marks -> multiple lines๋ฅผ String์ผ๋ก ์ธ ์ ์๊ฒ ํด ์ค๋ค.
let quotation = """
I said "I have \(apples) apples."
And then I said "I have \(apples + oranges) pieces of fruit."
"""
4. array ๋ dictionary๋ [ ] (brackets)์ ์ฌ์ฉํด์ ๋ง๋ค ์ ์๋ค.
- [ ] ์์ index๋ key ๋ฅผ ์ ์ด์ ๊ฐ๊ฐ์ ์์(element)์ ์ ๊ทผํ ์ ์์
- ๋ง์ง๋ง ์์ ๋ค์ ,(comma)๋ฅผ ๋ถ์ฌ๋ ์๊ด์๋ค.
var fruits = ["strawberries", "limes", "tangerines"]
fruits[1] = "grapes" // ๋๊ดํธ ์์ 1 ์ธ๋ฐ์ค ๋ฃ์ด์ grapes ๋ฅผ ์ถ๊ฐํจ. -> 1๋ฒ์๋ฆฌ์ ์ถ๊ฐ
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations" // ๋๊ดํธ ์์ key๋ฅผ ์ ๊ณ "Public Relartions"๋ผ๋ ์์๋ฅผ ์ถ๊ฐํจ.
5. Array(๋ฐฐ์ด)์ ์๋์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์์(element)๋ฅผ ์ถ๊ฐํ๋ ๋งํผ ์ถ๊ฐ๊ฐ ๋๋ค.
fruits.append("blueberries")
print(fruits)
// Prints "["strawberries", "grapes", "tangerines", "blueberries"]"
- append ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด array์ ๋งจ ๋ง์ง๋ง์ ์์๊ฐ ์ถ๊ฐ๋๋ ๊ฒ ๊ฐ๋ค.
6. ๋๊ดํธ๋ง ์จ์ ๋น array( [ ] ) ๋ dictionary ( [ : ] )๋ ํํ์ด ๊ฐ๋ฅํ๋ค.
let emptyArray: [String] = []
let emptyDictionary: [String: Float] = [:]
- ๋ง์ฝ ๋ค๊ฐ ๋น ๋ฐฐ์ด์ด๋ ์ฌ์ ์ ์๋ก์ด ๊ฐ์ ํ ๋นํ๋ ค๊ณ ํ๊ฑฐ๋, ๋๋ ๋ค๋ฅธ ์ฅ์์ ํ์ ์ ๋ณด๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ ์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
< 2. Control Flow >
์กฐ๊ฑด๋ฌธ์ ๋ง๋ค ๋๋ if ๋ switch๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฐ๋ณต๋ฌธ์ ๋ง๋ค ๋๋ for-in, while, repeat-while์ ์ฌ์ฉํ๋ค.
์กฐ๊ฑด์ด๋ ๋ฃจํ ๋ณ์๋ฅผ ( ) ๊ฐ ๋๋ฌ์ธ๋ ๊ฑด option์ด์ง๋ง, ๋ณธ๋ฌธ { }๋ ํ์์ ์ด๋ค.
a. If
1. if๋ฌธ์์ ์กฐ๊ฑด๋ถ๋ ๋ฐ๋์ Boolean expression์ด์ด์ผ ํ๋ค. (true or false)
var score: Int = 40
if score {
...
}
// ์ด๋ฐ ์กฐ๊ฑด๋ฌธ์ ์์ ์ ์๋ค
// score์ด Integer ํํ์ด๊ธฐ ๋๋ฌธ์ Boolean expression์ด ์๋๋ค.
2. if ์ let์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋๋ฝ๋ ์ ์๋ ๊ฐ์ ๋ํด ์ฌ์ฉํ ์ ์๋ค. ์ด ๊ฐ๋ค์ optionals๋ก ํ๊ธฐ๋๋ค.
(์ด ๋ถ๋ถ๋ ์ดํด๊ฐ ์ ๋๋ ๋ถ๋ถ์ด์๋๋ฐ ์ฐพ์๋ณด๋ Optional Binding์ด๋ผ๋ ํํธ์์ต๋๋ค. ์กฐ๊ธ์ด๋ผ๋ ์ฐพ์ ๋ด์ฉ์ ๋ฐ์ ์ ์ด๋ณด๊ฒ ์ต๋๋ค.)
- optional value๋? ๊ฐ์ ํฌํจํ๊ฑฐ๋ ๊ฐ์ด ์์(nil)์ ํฌํจํ๋ค.
→ ๊ฐ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํด ์ค๋ฅ๊ฐ ๋ ์ ์๋ ๊ฐ์ด๋ผ๋ ์๋ฏธ์ธ ๊ฒ ๊ฐ๋ค. - optional value๋ผ๋ ๊ฒ์ ํ์ํ๊ธฐ ์ํด value์ ํ์ ๋ค์ ๋ฌผ์ํ(?)๋ฅผ ์์ฑํ๋ค.
- ๊ทธ๋ผ ๊ฐ์ด ์๋ ์ํ์ธ nil ์ด๋? ์๋ฅผ ๋ค์ด String ํ์
์ ๋ณ์์ ๋ฌธ์์ด์ ํ ๋นํ๋ ๊ฒฝ์ฐ, ํด๋น ๋ณ์๋ ๊ฐ์ด ์๋ค.
๊ทธ๋ฌ๋ ์ฒ์๋ถํฐ nil ๊ฐ์ ํ ๋นํ๊ฑฐ๋, ์ด๊ธฐํํ์ง ์์ ๊ฒฝ์ฐ ํด๋น ๋ณ์๋ ๊ฐ์ด ์๋ ์ํ๊ฐ ๋๋ค.
→ ๋ณ์๋ ์์๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐํํ์ง ์์ ๊ฒฝ์ฐ, ํด๋น ๋ณ์๋ ์์๋ ๊ฐ์ ๊ฐ์ง์ง ์๋ ์ํ์ด๋ค. ์ด๋ฅผ uninitialized ์ํ ๋๋ uninitialized ๋ณ์ ๋๋ ์์๋ผ๊ณ ๋ ํ๋ค. (์ด๊ธฐํ๋ผ๋ ๋จ์ด๊ฐ ๋ฒ์ญ์ด๋ผ์ ํท๊ฐ๋ฆด ๋งํ ๋ถ๋ถ) - optional binding์ด๋? if ์ let ์ ๊ฐ์ด ์ฌ์ฉํด์ Optional value๊ฐ ๊ฐ์ด ์๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ์.
var optionalString: String? = "Hello"
print(optionalString == nil)
// Prints "false"
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)" // name ๋ณ์๊ฐ nil์ด ์๋ ๊ฒฝ์ฐ ์คํ๋จ
} else {
greeting = "Hello, anonymous" // name ๋ณ์๊ฐ nil์ธ ๊ฒฝ์ฐ ์คํ๋จ
}
- ์ ์ฝ๋์์ String? ์ ์ด ๋ณ์๋ฅผ Optional String ํ์ ์ผ๋ก ์ ์ธํ ๊ฒ์ด๋ค.
- ๋์์ "Hello"๋ผ๋ String๊ฐ์ ํ ๋นํ๊ธฐ์ ๋ ๋ฒ์งธ ์ค์ธ nil๊ณผ ๋์ผํ์ง ์ฌ๋ถ๋ false๋ผ๊ณ ๋์จ๋ค.
- ์ ์ฝ๋๊ฐ ์์ ๋์ง ์๋ ํ greeting ์ "Hello John Appleseed"๊ฐ ๋์ฌ ๊ฒ์ด๋ค.
if let constantName = optionalValue {
// optionalValue๊ฐ nil์ด ์๋ ๊ฒฝ์ฐ ์คํ๋๋ ์ฝ๋ ๋ธ๋ก
// constantName ์์์ optionalValue์ ๊ฐ์ ํ ๋น๋ฐ์ ์ฌ์ฉํ ์ ์์
} else {
// optionalValue๊ฐ nil์ธ ๊ฒฝ์ฐ ์คํ๋๋ ์ฝ๋ ๋ธ๋ก
}
- ํท๊ฐ๋ฆด๊น ๋ด ๋ค์ ํ๋ฒ ์ฝ๋๋ก ์ ๋ฆฌํ๋ค.
3. Optional Value๋ฅผ ๋ค๋ฃจ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ?? operator๋ฅผ ์ฌ์ฉํด์ Default Value๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
๋ง์ฝ Optional Value ๊ฐ์ด ์๋ค๋ฉด (์ฆ, nil ์ํ๋ผ๋ฉด), default value๊ฐ ๋์ ์ฌ์ฉ๋๋ค.
let nickname: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickname ?? fullName)"
// ์ด๊ฒฝ์ฐ nickname(optional value)์ด nil์ด๊ธฐ ๋๋ฌธ์
// informalGreeting ์ Hi John Applessed ๊ฐ ๋๋ค
// (default ๊ฐ์ด ๋์ ์ฐ์)
- ?? ์ฐ์ฐ์๋ optional value๊ฐ nil์ธ ๊ฒฝ์ฐ์ default valu๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ํ๋ค.
- ?? ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ default value๋ฅผ ์ง์ ํ๋ฉด optional value๊ฐ nil์ผ ๋๋ ์์ ํ๊ฒ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
b. Switch
1. Switch๋ฌธ์ ๋ชจ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ์ ๋ค์ํ ๋น๊ต์์ ์ ์ง์ํ๋ค. Switch๋ ์ ์ ๋ฐ ๋๋ฑ์ฑ ๋น๊ต๋ก ์ ํ๋์ง ์๋๋ค.
- ์ ์์ ๊ฐ์ ํน์ ํ ๋ฐ์ดํฐ ์ ํ์ ๊ตญํ๋์ง ์์ผ๋ฉฐ, ๋๋ฑ์ฑ ํ ์คํธ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๋น๊ต ์ฐ์ฐ์ ์ง์ํ๋ค๋ ๋ป
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
// Prints "Is it a spicy red pepper?"
2. Swift๋ฌธ์์ default case๋ฅผ ์ ๊ฑฐํ๋ฉด ์๊ธฐ๋ ์ค๋ฅ
Switch must be exhaustive
- Switch๋ฌธ์์ default case๋ฅผ ์ ๊ฑฐํ๋ฉด Switch๋ฌธ์ด ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ ์ด๋ค case์๋ ํด๋นํ์ง ์๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
- ์ด๋ฌํ ์ํฉ์์๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ฉฐ ์์ ๊ฐ์ ์ค๋ฅ๋ฉ์์ง๋ฅผ ํ์ํ๋ค.
- ๋ง์ฝ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด, Switc๋ฌธ ๋์ if-else๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
3. ์ผ์นํ๋ Switch๋ฌธ์ case ์ฝ๋๋ฅผ ์คํํ๊ณ ๋ ๋ค, ๊ทธ ํ๋ก๊ทธ๋จ์ Switch๋ฌธ์์ ๋ฒ์ด๋๋ค. ๋ค์ case๊ฐ ์ด์ด์ ๋์ค์ง ์๊ธฐ ๋๋ฌธ์ ์ผ์ผ์ด case์ break out์ ์ ์ ํ์๊ฐ ์๋ค.
c. for-in
1. for-in์ ์ฌ์ฉํ์ฌ, ๊ฐ key-value ์์ ์ฌ์ฉํ ์ด๋ฆ์ ์์ ์ ๊ณตํ์ฌ ๋์ ๋๋ฆฌ ํญ๋ชฉ์ ์กฐํํ๋ค.
- ์๋์ ์ฝ๋์์ ์ ๊ณต๋ ์ด๋ฆ์ ์์ ( _, numbers )์ด๋ค.
let interestingNumbers = [
"Prime": [2, 3, 5, 7, 11, 13],
"Fibonacci": [1, 1, 2, 3, 5, 8],
"Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (_, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
// Prints "25"
- ๋์ ๋๋ฆฌ๋ ์์๊ฐ ์๋ collection์ด๋ฏ๋ก key์ value๋ ์์์ ์์๋ก ์กฐํ๋๋ค.
d. while / repeat-while
1. ์กฐ๊ฑด์ด ๋๋ ๋๊น์ง ์ฝ๋ ๋ธ๋ก์ ๋ฐ๋ณตํ๋ ค๋ฉด while์ ์ฌ์ฉํ ์ ์๋ค.
var n = 2
while n < 100 {
n *= 2
}
print(n)
// Prints "128"
2. ๋ฃจํ์ ์กฐ๊ฑด์ด ๋์ ์์ ๊ฒฝ์ฐ ์ต์ํ ํ ๋ฒ์ ๋ฃจํ๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ ๋ณด์ฅํ๋ค <- repeat while์ ๋ํ ์ค๋ช
var m = 2
repeat {
m *= 2
} while m < 100
print(m)
// Prints "128"
e. range of indexes
1. ์ธ๋ฑ์ค์ ๋ฒ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด . . < ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํ์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์ ์๋ค.
var total = 0
for i in 0..<4 {
total += i
}
print(total)
// Prints "6"
- . . < → ๊ฐ์ฅ ์์๊ฐ์ ์๋ตํ๋ ๋ฒ์ / ํ์ด์ฌ์ผ๋ก ๋ฐ์ง๋ฉด range(0,4)์ ๋์ผ ex) 0 ..< 4 == 0, 1, 2, 3
- . . . → ์์ชฝ ๊ฐ ๋ชจ๋ ํฌํจํ๋ค. ex) 0 ... 4 == 0, 1, 2, 3, 4
๋ค๋ก ๊ฐ์๋ก ์ง๊ธ ํ ๊ฒ๋ณด๋ค ์ด๋ ค์์ง ๊ฒ ๊ฐ์์ ๊ณต์๋ฌธ์ A Swift Tour๋ฅผ ๋๊น์ง ํฌ์คํ ํ ์ ์์์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๋๋ ๋ฐ๊น์ง ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ํน์ ํ๋ฆฐ ๋ถ๋ถ์ด๋ ์ถ๊ฐํด์ฃผ๊ณ ์ถ์ ๋ถ๋ถ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์.