-
[Swift] Metatype μ΄λ?iOS/π Swift 2021. 10. 2. 21:47
μλ νμΈμπΆ
μ΄λ² μκ°μλ λ©ννμ μ λν΄μ μμλ³΄λ €κ³ ν©λλ€.
κ·ΈλΌ μμν΄λ³Όκ²μ!!π₯
λ©ννμ : νμ μ νμ
λ©ννμ μ νμ μ νμ μ λλ€.
μ΄ νμ μλ class, structure, enumeration, protocol νμ μ ν¬ν¨ν©λλ€.
μλ κ·Έλ¬λ©΄ String μ νμ μΈλ° κ·ΈλΌ λ©ννμ μ String μ νμ μ΄λΌλ 건κ°μ?
λ§μ΅λλ€. κ·Έλ¦¬κ³ String μ νμ μ String.Type μ λλ€!!! γ γ γ
μ²μμλ μ΄ κ°λ μ μ΄ν΄νκΈ° μ½μ§ μλλ°μ.
λ©ννμ μ νμ μ체λ₯Ό κ°λ¦¬μΌμΌν κ²½μ° (refer to)κ° μκΈ° λλ¬Έμ λ§λ€μ΄μ‘μ΅λλ€.
κ·Έλ¦¬κ³ μ¬μ€ μ°λ¦¬λ μ§κΈκΉμ§ λ©ννμ μ μΈμ€ν΄μ€μΈ [νμ ]μ μ μ¬μ©ν΄μ€κ³ μμμ΅λλ€.
그건 λμ€μ 보λλ‘νκ³
μ°μ μ κ° λ§λ κ·Έλνλ₯Ό νλ² λ³΄μ¬λ릴κ²μ.
μ΄ν΄κ° μ μκ°μλμ? κ·ΈλΌ κ³μ κΈμ μ΄μ΄λκ°λ³Όκ²μπ
νμ μ λ©ννμ μ μΈμ€ν΄μ€μ΄λ€
μ΄ κ°λ λ§ μ΄ν΄νλ©΄ λ©ννμ μ λλ©λλ€.
UIKit μμ ꡬνλ λ©ννμ μ μꡬνλ λ©μλλ€μ μΆ©λΆν μ΄ν΄νκ³ μ¬μ©ν μ μκ² λ©λλ€.
λ©ννμ μ μ΄μ©ν ꡬνμ μ΄νμ μ²μ²ν μ€μ²ν΄λ³΄λ©΄ λκ² μ£ ???
μ°μ λ€μ μ½λλ₯Ό λ³΄κ² μ΅λλ€.
let myClass: MyClass = MyClass.init()
myClass λΌλ μμλ MyClass λΌλ νμ μ΄λΌκ³ μ μΈλμκΈ° λλ¬Έμ
MyClass νμ μ μΈμ€ν΄μ€λ₯Ό λ£μ΄ μ£Όμμ΅λλ€.
μ°λ¦¬λ μ΄λ―Έ μ΄ κ·μΉμ μ΄ν΄νκ³ μ μ¬μ©νκ³ μμμ΅λλ€.
κ·Έλ λ€λ©΄ λ€μ λ©μλλ μ΄λ€κ°μ?
instance λΌλ μ΄λ¦μ argurment μ Myclass νμ μ μΈμ€ν΄μ€λ₯Ό λ£μ΄μ£Όμ΄μΌν¨μ μλͺ ν©λλ€.
κ·ΈλΌ λ©ννμ μ΄λΌκ³ μ μΈλ λ³μλ μμ, κ·Έλ¦¬κ³ λ©ννμ μΌλ‘ μ μΈλ μ λ¬μΈμλ μ΄λ€κ°μ??
λ©ννμ μΈμ€ν΄μ€λ₯Ό λ£μ΄μ£Όλ©΄ λκ² λ€μ!
μκΉ μμμλ³Έ κ·Έλνλ₯Ό λ€μ λ³ΌκΉμ?
μ€~ νμ μ λ©ννμ μ μΈμ€ν΄μ€κ΅°μ!
κ·ΈλΌ λ€μ μ½λμμ μ€λ₯Έμͺ½ ννμμΌλ‘ 무μμ΄ λ€μ΄κ°μΌνλμ§λ νλ² λ§μΆ°λ³ΌκΉμ?
???? μλ MyClass.self κ° λ€μ΄κ°λ©΄ λ©λλ€.
λ©ννμ μ μΈμ€ν΄μ€λ₯Ό λ£μ΄μ£Όμ΄μΌνλκΉμ!
MyClass μ MyClass.self μ μ°¨μ΄
κ·Έλ¬λ©΄ μ΄λ° κΆκΈμ¦μ΄ μκΈΈμ μμ΅λλ€.
μλ MyClass κ° νμ μλκ°μ???
λ€μ .self λ μ λΆμ¬μΌνλμ???
MyClass λ νμ λ€μ (type name)μ΄μ§, νμ μ€λΈμ νΈ (type object) λ μλλλ€.
λ©ννμ μ μΈμ€ν΄μ€κ° μλλΌλ λ»μ΄μ£ !
MyClass λ§μΌλ‘λ νμ μ€λΈμ νΈλ₯Ό ννν μ μμ΅λλ€.
κ·ΈλΌμλ λΆκ΅¬νκ³ μ»΄νμΌλ¬κ° μμΈμ μΌλ‘ νμ©ν΄ μ£Όλ 컨ν μ€νΈκ° μμ΅λλ€.
λ°λ‘ λ©€λ²μ μ κ·Όν λ μΈλ°μ.
μ°λ¦¬λ μ€νν±, ν΄λμ€ λ©€λ²λ₯Ό μ κ·Όν λ .(dot Syntax) λ₯Ό μ΄μ©ν΄μ μ μ κ·Όν΄ μμ΅λλ€.
λ°λΌμ μλμ κ°μ μ½λλ μ»΄νμΌ μλ¬κ° λ¨μ§ μμ΅λλ€.
λ μ½λλ μ νν λμΌν μμ μ μνν©λλ€.
첫λ²μ§Έ μ½λλ μ»΄νμΌλ¬κ° νμ©ν΄μ£Όλ νμ λ€μ (MyClass) μ ν΅ν΄ λ©€λ²μ μ κ·Όνκ³ ,
λλ²μ§Έ μ½λλ νμ μ€λΈμ νΈ (MyClass.self) λ₯Ό ν΅ν΄ λ©€λ²μ μ κ·Όνκ³ μμ΅λλ€.
μ΄μΈμ κ²½μ°μλ νμ λ€μμ μ¬μ©νμ§ λͺ»ν©λλ€.
λ°λΌμ λ€μ μ½λλ μ»΄νμΌ μλ¬κ° λ°μν©λλ€.
λ©ννμ μ μΈμ€ν΄μ€, νμ μ€λΈμ νΈμΈ MyClass.self λ₯Ό μ λ¬ν΄μ£ΌμΈμππ»
Protocol μ λ©ννμ
The metatype of a protocol type—not the concrete type that conforms to the protocol at runtime—is the name of that protocol followed by .Protocol.
.Type μΌλ‘ λ©ννμ μ νννλ κΈ°μ‘΄ νμ λ€κ³Όλ λ€λ₯΄κ²
νλ‘ν μ½μ νμ μ .Protocol λ‘ ννν©λλ€.
κ·Έλ¦¬κ³ νλ‘ν μ½μμ .Type μ ν΄λΉ νλ‘ν μ½μ μ±νν νμ μ λ©ννμ μ κ°λ¦¬ν΅λλ€.
μ΄λμμ νμ©ν μ μμκΉ?
metatype allows you to use all of that type's class properties and methods, including init():
μ°λ¦¬λ λ©ννμ μΈμ€ν΄μ€λ₯Ό ν΅ν΄μ μ€νν±, ν΄λμ€ λ©€λ²μ μμ±μλ₯Ό νΈμΆ ν μ μμ΅λλ€.
λ¨, μμ±μλ λ°λμ required μμ±μλ₯Ό νΈμΆν μ μμ΅λλ€.
λ€μμ BlogPost λΌλ ν΄λμ€λ₯Ό μμν μ λ€λ¦ λ©ννμ μ μ¬μ©ν ν©ν 리 μ λλ€.
μ§μ¬μ§ μ½λλ₯Ό μ΄ν΄ν μλ μμ§λ§, μ΄λ κ² μ§λΌκ³ νλ©΄ μμ§μ μ΄μν κ² κ°λ€μ;;;;
μ€λλ λλ μ±μ₯νλ€!!!βπ»
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.μ°Έκ³ μλ£:
https://docs.swift.org/swift-book/ReferenceManual/Types.html
https://swiftrocks.com/whats-type-and-self-swift-metatypes
'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] if case let λ₯Ό μ¬μ©νμ¬ λΆνμν μ½λ μ€μ΄κΈ° (4) 2022.01.16 [Swift] Any μ AnyObject (0) 2021.10.16 [Swift] Extensions μ΄μ 리 (μμ μ€) (2) 2021.05.27 [Swift] νλ‘ν μ½ μ΄μ 리 (0) 2021.05.22 [Swift] - Capturing Values by Closures (κ°μ μΊ‘μ²νλ ν΄λ‘μ ) (0) 2021.05.07