Swift๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ๋ค์ด ์๋ค.
๋ณดํต ๊ธฐ๋ณธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด C, Python, Java์์ ์ฐ์ด๋
Int, Double, Float, String, Bool, Array๋ฑ ์ ๋ง ๋ง๋ค.
ํ์ง๋ง ๋ด๊ฐ ์ฒ์ Swift๋ฅผ ๊ณต๋ถํ ๋ ๋ฏ์ ๋ฐ์ดํฐ ํ์ ์ด ์์๋ค.
๋ฐ๋ก Any์ AnyObject ์ด๋ค.
Python์์๋ object ํ์ ๊ณผ ๋น์ทํ๊ณ C#์์๋ object ํ์ ๊ณผ ๋น์ทํ๋ค.
์ค๋์ Swift์์์ Any์ AnyObject์ ์ฐจ์ด์ ์ ์์๋ณด๊ฒ ๋ค.
Any
์ค์ํํธ์ ๋ชจ๋ ํ์ ์ ๋ํ๋ด๋ ์ผ๋ฐ์ ์ธ ํ์ ์ด๋ค.
๋ชจ๋ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ผ ์ ์๋ค.
AnyObject
๋ชจ๋ ํด๋์ค ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ผ ์ ์๋ค.
AnyObject๋ ํ์ ์ด ์๋๋ผ 'ํ๋กํ ์ฝ' ์ด๋ค.
์ค์ํํธ์ ๋ชจ๋ ํด๋์ค๋ AnyObject ํ๋กํ ์ฝ์
์ค์ํ๊ธฐ ๋๋ฌธ์ ํด๋์ค ์ธ์คํด์ค๋ง ์ ์ฅํ ์ ์๋ค.
Any์ ๋ํ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์ฝ๋๋ก ์์๋ฅผ ๋ค์ด๋ณด์.
var name : String
name = "gahyun"
print(name) //gahyun
name = 2023
print(name) //ERROR
name์ด๋ผ๋ ๋ณ์๋ Stringํ์ ์ด๋ค. "gahyun"์ ๋ฃ์ผ๋ฉด ๋ฌธ์ ๊ฐ ์์ง๋ง
2023์ด๋ผ๋ ์ซ์๋ฅผ ๋ฃ์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด์ฒ๋ผ ์ผ๋ฐ์ ์ธ ํ์ ๋ค์ ์ง์ ํ ํ์ ์ธ์๋ ๋ณ์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
var info = Any
info = "gahyun"
print(info) //gahyun
info = 23
print(info) //23
info = 167.7
print(info) //167.7
info๋ผ๋ ๋ณ์๋ฅผ Any๋ก ํ๋ฉด, String์ธ "gahyun"์ ๋ฃ์ด๋,
Int์ธ 23์ ๋ฃ์ด๋, Double 167.7์ ๋ฃ์ด๋ ๋ชจ๋ ๊ฐ๋ฅํ๋ค.
AnyObject์ ์์๋ ์ฝ๋๋ก ๋ณด์.
class MyClass {
var value: Int = 10
}
var anyObjectValue: AnyObject
anyObjectValue = MyClass()
print(anyObjectValue.value) // 10
AnyObject ๋ณ์์ ํ ๋น๋๋ ๊ฐ์ ํด๋์ค์ ์ธ์คํด์ค์ฌ์ผ ํ๋ค.
Any ํ์ ์ ํ์ ์บ์คํ
var info : Any
info = 23
// is ์ฐ์ฐ์ ํตํด ํ์
ํ์ธ
if info is Int {
print("info is Int")
}
// as? ์ฐ์ฐ์ ํตํด ํ์
๋ณํ
if let intValue = info as? Int {
print("Int ํ์
์ผ๋ก ๋ณํ" \(intValue))
} else {
print("Int ํ์
์ผ๋ก ๋ณํ ๋ถ๊ฐ")
}
AnyObject ํ์ ์ ํ์ ์บ์คํ
class MyClass {
var value: Int = 10 //Int ํ์
ํ๋กํผํฐ ์ ์ธ
}
//newValue๋ฅผ AnyObject ํ์
์ผ๋ก ์ ์ธํ๊ณ MyClass ์ธ์คํด์ค ํ ๋น
var newValue: AnyObject = MyClass()
//is ์ฐ์ฐ์ผ๋ก newValue๊ฐ MyClass์ ์ธ์คํด์ค์ธ์ง ํ์ธ
if newValue is MyClass {
print("newValue is MyClass")
}
//as? ์ฐ์ฐ์ผ๋ก ํ์
์บ์คํ
if let myClassInstance = newValue as? MyClass {
print("value:", myClassInstance.value)
} else {
print("newValue is not MyClass") //myClassInstance๋ nil์ด ๋๋ค.
}