์คํ ํฌ๋ ๋ํ๊ต ๊ฐ์์ ์ผ๋ถ๋ฅผ ํด์ํ ๋ด์ฉ์
๋๋ค.
์กฐ๊ธ์ด๋ผ๋ ์๋ฏธ๊ฐ ์๋ชป ์ ๋ฌ๋ ๊ฒ ๊ฐ์ ๋ถ๋ถ์ ์์ด๋ฅผ ๊ทธ๋๋ก ์ผ์ต๋๋ค.
์ง์ญ์ด๋ผ, ๋ฐ๋ง๋ก ์ผ๋๋ฐ ์ํด ๋ถํ๋๋ฆฝ๋๋ค. :)
Enum
Associated Data๋ฅผ ๋ชจ์๋๋ ๊ณณ์ด๋ฉฐ, struct
์ ๋ง์ฐฌ๊ฐ์ง๋ก VALUE TYPE์ด๋ค.
enum FastFood {
case hamburger(numberOfPatties: Int)
case drink(String, ounces: Int)
case cookie
// method๋ฅผ ๊ฐ์ง ์ ์๋ค.
func isHamburger(number: Int) -> Bool {
switch self {
case .hamburger:
return true
default:
return false
}
}
// ์ ์ฅ ํ๋กํผํฐ๋ ๊ฐ์ ์ ์์ง๋ง, ๊ณ์ฐ ํ๋กํผํฐ๋ ๊ฐ์ง ์ ์๋ค.
var calories: Int {
// ์นผ๋ก๋ฆฌ๋ฅผ ๊ณ์ฐ
}
//mutating ํค์๋๋ฅผ ์ด์ฉํ์ฌ ์ฌํ ๋น ํ ์ ์๋ค.
//mutating ํค์๋๊ฐ ํ์ํ ์ด์ ๋ 'VALUE TYPE'์ด๊ธฐ ๋๋ฌธ์ด๋ค.
mutating func switchToBeingCookie {
self = .cookie
}
}
// Set
let menu: FastFood = FastFood.hamburger(patties:2)
let menu2: FastFood = .cookie // Type Inference
// ์ํ์ฒดํฌ
switch menu {
case .hamburger: print("burger")
case .drink: print("dirnk")
case .cookie: break // If you don't want to do anything
}
// Switch๋ฌธ์์ ๋ฐ๋์ ALL POSSIBLE CASES๋ฅผ ๋ค๋ฃจ์ด์ผ ํจ.
// ์ซ๋ค๋ฉด default
switch menu {
case .hamburger: print("burger")
default: print("not burger")
}
// ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ ์ด๋ป๊ฒ ๊ฐ์ ธ์ค๋๊ฐ?
// "let" syntax๋ฅผ ์ด์ฉํด์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
// ์ ์ธ๊ณผ๋ ๋ค๋ฅธ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์์ ์ฃผ๋ชฉํด๋ผ.
switch menu {
case .hamburger(let pattyCount): print("\(pattyCount) patties!")
// ๋ง์ฝ ์๊ด์๋ ๋ฐ์ดํฐ๋ผ๋ฉด _ ๋ฅผ ์ฌ์ฉํด๋ผ.
case .drink(_, let ounces): print("\(ounces)")
default: print("not burger")
}
Optional
์ต์
๋์ Enum
์ด๋ฉฐ, Swift์์ ์์ ํ ํ์
์ด๋ค!
nil
⇒ not set
?
⇒ Optional์ ์ ์ผํ ๋, ๊ฐ์ ์ถ์ถํ ๋ ์ฌ์ฉํ๋ค.
!
⇒ Optional ๋ฐ์ดํฐ๋ฅผ unwrapํ ๋ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋ if ํค์๋๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
๋ง์ฝ ! ํค์๋๋ก ์ ์ธํ๋ค๋ฉด, ์ ๊ทผ ์ ๊ฐ์ ์ถ์ถํจ์ ์๋ฏธํ๋ค.
??
⇒ Optional์ด not set์ผ ๋ default value๋ฅผ ํํํ๋ค.
enum Optional <T> {
case None
case Some(<T>)
}
var hello: String? // var hello: Optional<String> = .none
var hello: String? = "hello" // var hello: Optional<String> = .some("hello")
var hello: String? = nil // var hello: Optional<String> = .none
// Optional Chaining
let y = x?.foo()?.bar?.z
unwraping ํ๋ ๊ณผ์ ์ ๋ค์์ switch๋ฌธ๊ณผ ๊ฐ๋ค ๋ณด๋ฉด ๋๋ค.
์กฐ๊ธ ํท๊ฐ๋ฆด ์ ์๋๋ฐ
var hello: Int?
์ ์๋ฃํ์ด ๋ฌด์์ด๋๊ณ ๋ฌผ์ด ๋ณด์์ ๋, Int๊ฐ ์๋ Optional Type์ด๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค. (์กฐ๊ธ ๋ ์ธ๋ถ์ ์ผ๋ก ๋งํ์๋ฉด Optional String ํ์ )
'iOS ๐ฅ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift์์ Abstract Class ๋ง๋ค๊ธฐ (0) | 2023.06.06 |
---|---|
Swift ์๋ฌ ์ฒ๋ฆฌ(Error Handling) (0) | 2021.06.25 |
Swift ํด๋์ค ์์๊ณผ ์ด๊ธฐํ (0) | 2021.06.25 |
Codable Protocol์ ์ด์ฉํด์ ๋ณต์กํ JSON Parsing ํ๊ธฐ (0) | 2021.04.15 |
Swift Date์ String ๊ฐ์ ๋ณํ (0) | 2021.04.07 |