2021. 1. 16. 11:13ใ๐ง๐ป๐ป iOS ๊ฐ๋ฐ/Swift
ํด๋น ๊ธ์ ์ผ๊ณฐ๋์ ์ค์ํํธ ๊ฐ์์ ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ Swift์ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค!
1. ์กฐ๊ฑด๋ฌธ
1. 1. if else ๊ตฌ๋ฌธ
Swift์ if else ๊ตฌ๋ฌธ์ ๋ค๋ฅธ ์ธ์ด์ ๋น์ทํ ํํ๋ฅผ ๋ ์ง๋ง ์กฐ๊ฑด์ ๊ฐ์ธ๋ ์๊ดํธ๊ฐ ์ ํ์ฌํญ์ด๋ผ๋ ๊ฒ๊ณผ ์กฐ๊ฑด์ด ๋ฌด์กฐ๊ฑด Bool Type์ด์ฌ์ผ ํ๋ค๋ ๊ฒ์ด ๊ฐ์ฅ ํฐ ํน์ง์ ๋๋ค. if ๋จ๋ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ if, else if, else ์์ผ๋ก ์กฐ๊ฑด์ ์ฒดํฌํ๊ณ true๋ฅผ ๋ง๋๋ฉด ํด๋น ๋ฌธ์ฅ์ ์คํํ๊ณ ๊ตฌ๋ฌธ์ ๋น ์ ธ๋์ต๋๋ค.
- ๊ธฐ๋ณธ ํํ
// if else ๊ธฐ๋ณธํํ
if ์กฐ๊ฑด๋ฌธ {
์คํ๊ตฌ๋ฌธ1
} else if ์กฐ๊ฑด๋ฌธ {
์คํ๊ตฌ๋ฌธ2
} else {
์คํ๊ตฌ๋ฌธ3
}
1. 2. switch ๊ตฌ๋ฌธ
๋ ์ฌ๊ฒจ๋ณด์์ผ ํ ๊ฒ์ ์ด switch ๊ตฌ๋ฌธ์ ๋๋ค. switch๋ฌธ๋ if else ๊ตฌ๋ฌธ์ฒ๋ผ ์๊ดํธ๋ฅผ ์๋ตํ ์ ์๊ณ ๋ฐ๋ก break ํค์๋๋ฅผ ์์ฑํ์ง ์์๋ case ๋ด๋ถ์ ์ฝ๋๋ฅผ ์คํํ๊ณ ๋๋ฉด switch ๊ตฌ๋ฌธ์ ๋น ์ ธ๋์ต๋๋ค. ๋ํ ๋น๊ต๊ฐ์ด ๋ช ํํ ํ์ ์ ์ธ ๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฐ๋์ default๋ฅผ ์์ฑํด์ผํฉ๋๋ค.
๋ง์ฝ ์์์ ๋ถํฐ ์กฐ๊ฑด์ ๋ง๋ case๋ฅผ ์ฐ์์ ์ผ๋ก break ํ์ง ์๊ณ ์คํํ๋ ค๋ฉด fallthrough ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. case์ ์ฌ๋ฌ ๊ฐ์ ๋น๊ต๊ฐ์ , (comma)๋ก ๊ตฌ๋ถํ์ฌ ํ ๋ฒ์ ์ฒดํฌํ ์ ์์ต๋๋ค.
Swift์ ๊ตฌ๋ฌธ์ ์กฐ๊ฑด์๋ ์ ์ ๊ฐ ๋ง๊ณ ๋ ๋ค์ํ ๊ฐ (์ ์, ๋ถ๋์์ ํ์ , ๋ฌธ์, ๋ฌธ์์ด, ํํ ๋ฑ) ์ด ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋์ ์ ๋ ฅ๊ฐ๊ณผ ๊ฐ case์ ๋ค์ด๊ฐ ๋น๊ต๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ด ํญ์ ๊ฐ์์ผ ํฉ๋๋ค.
- switch ๊ตฌ๋ฌธ ๊ธฐ๋ณธ ํํ
// switch ๊ตฌ๋ฌธ ๊ธฐ๋ณธํํ
switch ์
๋ ฅ๊ฐ {
case ๋น๊ต๊ฐ:
์คํ๊ตฌ๋ฌธ
case ๋น๊ต๊ฐ2, ๋น๊ต๊ฐ3:
์คํ๊ตฌ๋ฌธ
default:
์คํ๊ตฌ๋ฌธ
}
- ๋ค์ํ ์ ๋ ฅ๊ฐ , fallthrough ํค์๋ ์ฌ์ฉ
var someCountry: Character = "๐คญ"
switch someEmoji {
case "๐","๐","๐คญ":
print("\(someEmoji)์ ์๋ ์ด๋ชจ์ง ์
๋๋ค.")
fallthrough
case "๐ฑ":
print("\(someEmoji)์ ๊ธฐ๋ถ์ด ๋ณ๋ก์ธ ์ด๋ชจ์ง์
๋๋ค.")
default:
print("\(someEmoji)์ ์ด๋ชจ์ง์
๋๋ค.")
}
// ๐คญ์ ์๋ ์ด๋ชจ์ง ์
๋๋ค.
// ๐คญ์ ๊ธฐ๋ถ์ด ๋ณ๋ก์ธ ์ด๋ชจ์ง์
๋๋ค.
fallthrough ํค์๋๋ฅผ ๋ช ์ํ๋ฉด ํ๋์ case๋ฌธ์ ๊ฑฐ์น ๋ค ๊ทธ๋ค์ case๋ฌธ์ด ์กฐ๊ฑด์ ๋ง์ง ์๋๋ผ๋ ์ด์ด์ ์คํํฉ๋๋ค.
case " ๐ฑ" ์ดํ์ fallthrough ํค์๋๋ฅผ ๋ช ์ํ์ง ์์๊ธฐ ๋๋ฌธ์ break ์ฒ๋ฆฌ๋์ด ๊ตฌ๋ฌธ์ ๋น ์ ธ๋์ต๋๋ค.
- ๋ฒ์ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ Switch ์กฐ๊ฑด๋ฌธ
var intVal: Int = 5
switch intVal {
case 0: print("Value is zero")
case 1...10: print("Value is in 1~10")
case 11..<20: print("Value๋ 11์ด์ 20๋ฏธ๋ง")
case Int.min..<0: print("Value๋ ์์")
default: print("Value๋ 20 ์ด์์ ์์")
}
intVal = 20
switch intVal {
case 0: print("Value is zero")
case 1...10: print("Value is in 1~10")
case 11..<20: print("Value๋ 11์ด์ 20๋ฏธ๋ง")
case Int.min..<0: print("Value๋ ์์")
default: print("Value๋ 20์ด์์ ์์")
}
Swift์์๋ ๊ฐ์ ๋ฒ์๋ฅผ ์ฝ๊ฒ ํ์ํ ์ ์๋ ๋ฒ์ ์ฐ์ฐ์๊ฐ ์กด์ฌํฉ๋๋ค.
- ๋ฒ์ ์ฐ์ฐ์
- ํ์ ๋ฒ์ ์ฐ์ฐ์ A...B : A ๋ถํฐ B๋ฅผ ํฌํจํ๋ A๋ถํฐ B๊น์ง์ ์
- ๋ฐํ์ ๋ฒ์ ์ฐ์ฐ์ A..<B: A ๋ถํฐ B๋ฏธ๋ง๊น์ง์ ์
- A...: A ์ด์์ ์
- ...A: A ์ดํ์ ์
- ..<A: A ๋ฏธ๋ง์ ์
- ๊ฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ ํํ switch case
var tupleValue: (name: String, age: Int) = ("extramilejin", 20)
switch tupleValue {
case ("extramilejin", 28):
print(" ์ด๋ฆ๊ณผ ๋์ด ๋ชจ๋ ๋ง์ท์ต๋๋ค!")
case ("extramilejin", let age): //let์ ๋ถํ ๊ฐ ๋ฐ์ธ๋ฉ.
print(" ์ด๋ฆ๋ง ๋ง์์ต๋๋ค. ์
๋ ฅํ ๋์ด๋ \(age)์
๋๋ค.")
case (let name, 28): //let์ ๋ถํ ๊ฐ ๋ฐ์ธ๋ฉ.
print(" ๋์ด๋ง ๋ง์์ต๋๋ค. ์
๋ ฅํ ์ด๋ฆ์ \(name)์
๋๋ค.")
default:
print(" ๋ ๋ค ์๋๋๋ค.")
}
tupleValue = ("extramilejin", 28)
switch tupleValue {
case ("extramilejin", 28):
print(" ์ด๋ฆ๊ณผ ๋์ด ๋ชจ๋ ๋ง์ท์ต๋๋ค!")
case ("extramilejin", let age):
print(" ์ด๋ฆ๋ง ๋ง์์ต๋๋ค. ์
๋ ฅํ ๋์ด๋ \(age)์
๋๋ค.")
case (let name, 28):
print(" ๋์ด๋ง ๋ง์์ต๋๋ค. ์
๋ ฅํ ์ด๋ฆ์ \(name)์
๋๋ค.")
default:
print(" ๋ ๋ค ์๋๋๋ค.")
}
2. ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํฌ์คํ ์์๋ Swift์ ์กฐ๊ฑด๋ฌธ์ธ if else ๊ตฌ๋ฌธ๊ณผ switch ๊ตฌ๋ฌธ์ ๋ํด์ ์์๋ณด์์ต๋๋ค. switch ๊ตฌ๋ฌธ์ ๋น๊ต๊ฐ์ where ์ ์ ๋ํด ์กฐ๊ฑด์ ๋ ์์ธํ๊ฒ ํํํ ์ ์์ง๋ง where์ ์ ๋ํด์๋ ๋ค์ ํฌ์คํ ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. Swift ๋ฌธ๋ฒ์ ๋ค ๋ณด๊ณ ์ด์ ๊ณต๋ถํ Objective - C์ฑ ์ด ๋์ฐฉํ๋ค์! ๋ฐฐ์ธ๊ฒ ๋๋ฌด ๋ง์ง๋ง ๊ณ์ ๋ณต์ต ๊ฒธ Swift ๋ฌธ๋ฒ์ ๋ํด์ ํฌ์คํ ํด์ผ๊ฒ ์ต๋๋ค.
์ฐธ์กฐ: ์ ํ API ๊ฐ์ด๋๋ผ์ธ , ์ ํ ๊ณต์ ๊ฐ๋ฐ ๋ฌธ์ , Swift 5 ํ๋ก๊ทธ๋๋ฐ/ ์ง์์ด ์ผ๊ณฐ