ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Any 와 AnyObject
    iOS/🟠 Swift 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

    λŒ“κΈ€

μ–΄μ œλ³΄λ‹€ λ°œμ „ν•œ λ‚˜