iOS/🟠 Swift

[Swift] Any 와 AnyObject

woozzang 2021. 10. 16. 10:49

1μ°¨ μˆ˜μ •: 21.10.17

 

μ•ˆλ…•ν•˜μ„Έμš”πŸΆ

이번 μ‹œκ°„μ—λŠ” Any 와 AnyObject λ₯Ό μ •λ¦¬ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.


 

ꡬ체적인 νƒ€μž…μ΄ μ•„λ‹Œ μ•„무 νƒ€μž… μœΌλ‘œ μž‘μ—…ν•˜κΈ° μœ„ν•΄ μŠ€μœ„ν”„νŠΈκ°€ μ œκ³΅ν•˜λŠ” 두 가지 νŠΉλ³„ν•œ νƒ€μž…

  • Any νƒ€μž… λ³€μˆ˜μ— λ„£μ–΄μ£ΌλŠ” 것이 νƒ€μž… 컨버전이 μ•„λ‹Œ νƒ€μž… μΊμŠ€νŒ…μž„μ— μœ μ˜ν•˜μž.
    • Any 와 AnyObject νƒ€μž…μ€ μƒμ„±μžλ₯Ό μ œκ³΅ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • μ•„λž˜λŠ” μΊμŠ€νŒ…μ˜ νŠΉμ§• πŸ‘‡πŸ»πŸ‘‡πŸ»πŸ‘‡πŸ»πŸ‘‡πŸ»
Casting doesn’t actually modify the instance or change its values.
The underlying instance remains the same;
it’s simply treated and accessed as an instance of the type to which it has been cast.

 

  • Any λŠ” ν•¨μˆ˜ νƒ€μž…μ„ ν¬ν•¨ν•œ μ–΄λ– ν•œ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ“  가리킬 수 μžˆλ‹€.
  • var things: [Any] = []
    
    things.append(0)
    things.append(0.0)
    things.append(42)
    things.append(3.14159)
    things.append("hello")
    things.append((3.0, 5.0))
    things.append({ (name: String) -> String in "Hello, \(name)" })​
     
    • 심지어 λ©”νƒ€νƒ€μž… μΈμŠ€ν„΄μŠ€λ„ 가리킬 수 있음!!!😱

λ©”νƒ€νƒ€μž…μ΄λž€?

 

  • AnyObject λŠ” 클래슀 νƒ€μž… μΈμŠ€ν„΄μŠ€λΌλ©΄ μ–΄λ–€ νƒ€μž…μ΄λ“  가리킬 수 μžˆλ‹€.
    1. 근데 정말 Class νƒ€μž…λ§Œ κ°€λŠ₯ν•˜λ‹€. (μ°Έμ‘°νƒ€μž…μ΄ μ•„λ‹ˆλΌ)
    2. μ°Έμ‘°νƒ€μž…μΈ ν΄λ‘œμ €λŠ” Any νƒ€μž…μ— μΊμŠ€νŒ…ν•  수 μžˆλ‹€.

 

  • Any 와 AnyObject λŠ” 정말 ν•„μš”ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. ( ν•„μš”ν•˜λ‹€λ©΄ 섀계가 잘λͺ»λ˜μ—ˆμ„ κ°€λŠ₯성이 큼 )

 

  • λͺ…ν™•ν•œ νƒ€μž…μœΌλ‘œ μž‘μ—…ν•˜λŠ” 것이 Any, AnyObject νƒ€μž…μ„ μ‚¬μš©ν•˜λŠ” κ²ƒλ³΄λ‚˜ 항상 λ‚«λ‹€!!!!!πŸ”₯
    1. 컴파일러의 νƒ€μž…μ²΄ν¬λ₯Ό μ „ν˜€ μ‚¬μš©ν•˜μ§€ λͺ»ν•œλ‹€ (μŠ€μœ„ν”„νŠΈλŠ” κ°•νƒ€μž… μ–Έμ–΄)
    2. λŸ°νƒ€μž„μ— νƒ€μž… 검사λ₯Ό ν•΄μ•Όν•˜λ―€λ‘œ μ‹€ν–‰ 쀑 ν¬λž˜μ‹œκ°€ λ°œμƒν•˜κΈ° 더 쉽닀
    3. κΈ°μ‘΄ Objc-C λŸ°νƒ€μž„μ—μ„œ κ΅¬λ™λ˜λŠ” API λ₯Ό μ‚¬μš©ν•˜λŠ” 경우λ₯Ό μ œμ™Έν•˜κ³ 

 

  • Any ν˜Ήμ€ AnyObject νƒ€μž…μœΌλ‘œ μΊμŠ€νŒ…λœ μΈμŠ€ν„΄μŠ€λŠ” ꡬ체적인 νƒ€μž…μ„ λ‹€μ‹œ μ‚¬μš©ν•˜λ €λ©΄ is ν˜Ήμ€ as μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

Any νƒ€μž… μžμ²΄λ‘œλŠ” ν•  수 μžˆλŠ” 것이 아무것도 μ—†λ‹€.

 

// μΊμŠ€νŒ…μ΄ μ„±κ³΅ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό ν•΄λ‹Ή νƒ€μž…μ˜ μƒμˆ˜λ‘œ λ°”μΈλ”©ν•˜λŠ” μ½”λ“œμ΄λ‹€.

for thing in things {
  switch thing {
    case 0 as Int:
      print("zero as an Int")
    case 0 as Double:
      print("zero as a Double")
    case let someInt as Int:
      print("an integer value of \(someInt)")
    case let someDouble as Double where someDouble > 0:
      print("a positive double value of \(someDouble)")
    default:
      continue
  }
}

 

 


μ˜€λŠ˜λ„ λ‚˜λŠ” μ„±μž₯ν–ˆλ‹€!!πŸ”₯

 

πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

[참고 링크]

https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html