-
[Swift] νμ μΌλ‘μμ νλ‘ν μ½ ( Protocol as Type )iOS/π Swift 2021. 1. 19. 15:32
μ°Έκ³ μλ£: Protocols - swift.org
νλ‘ν μ½μ First Class Citizen μ΄κΈ° λλ¬Έμ, νλμ λ 립μ μΈ νμ ( a fully fledged types ) μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
λ°λΌμ μλ 3κ°μ§κ° κ°λ₯ν©λλ€.
1. function, method, initializer μ parameter μ return typeμΌλ‘ μ¬μ© κ°λ₯
2. constant, variable, property μ type μΌλ‘ μ¬μ© κ°λ₯
3. array, dictionary μ κ°μ 컨ν μ΄λμ itemμ typeμΌλ‘ μ¬μ© κ°λ₯
κ·Έλ¦¬κ³ νμ μ΄κΈ° λλ¬Έμ Upper Camel Case λ₯Ό μ¬μ©ν©λλ€. (e.g. RandomNumberGenerator, FullyNamed ...)
class Dice { let sides: Int let generator: RandomNumberGenerator init(sides: Int, generator: RandomNumberGenerator) { self.sides = sides self.generator = generator } func roll() -> Int { return Int(generator.random() * Double(sides)) + 1 } }
μ μ½λμμ generator μμ±μ RandomNumberGenerator νλ‘ν μ½ νμ μ λλ€.
μ΄κ²μ ν΄λΉ νλ‘ν μ½μ μ±νν μ΄λ ν ν΄λμ€μ μΈμ€ν΄μ€λ λ€μ΄κ° μ μλ€λ κ²μ μλ―Έν©λλ€.
" You can set it to an instance of any type that adopts the RandomNumberGenerator protocol ." - Swift.org
νμ§λ§ ν΄λμ€ μΈμ€ν΄μ€μ μ°Έμ‘°κ° generator μ ν λΉλ λ, RandomNumberGenertor νμ μΌλ‘ μ μΊμ€ν λμ΄ λ€μ΄κ°κ² λ©λλ€.
μ¦, νλ‘ν μ½ μꡬμ¬νμ ꡬνν λ©μλ μΈμ λ€λ₯Έ λ©μλλ μμ±μ μ κ·Όν μ μμμ μλ―Έν©λλ€.
νλ‘ν μ½ νμ μΌλ‘ μΊμ€ν λμκΈ° λλ¬Έμ λλ€.
μ¬μ©νλ €λ©΄ ν΄λΉ ν΄λμ€λ‘ λ€μ΄μΊμ€ν νμ¬ μ¬μ©ν΄μΌ ν©λλ€.
Protocol Conformance
νλ‘ν μ½μ μ±μ©νκ³ μλμ§ νμΈνλλ°μλ νμ μΊμ€ν μ°μ°μλ₯Ό μ¬μ©ν©λλ€. ( is, as, as?, as! )
is μ°μ°μλ νλ‘ν μ½ νμ μ±μ© μ¬λΆλ₯Ό Bool κ°μΌλ‘ λ°νν©λλ€.
as μ°μ°μλ νλ‘ν μ½ νμ μΌλ‘ μΊμ€ν μ μλν©λλ€. μ»΄νμΌ νμ μΊμ€νΈμ λλ€.
νλ‘ν μ½λ‘μ νμ λ³νμ μ μΊμ€ν κ³Ό μ μ¬νλ―λ‘ λ³΄ν΅ as μ°μ°μλ₯Ό μ΄μ©ν©λλ€.
λ°λλ‘ protocol μμ class λ‘μ μΊμ€ν μμλ μ¬μ©ν μ μμ΅λλ€. λ€μ΄μΊμ€ν κ³Ό μ μ¬νκΈ° λλ¬Έμ λλ€.
as? μ°μ°μλ νλ‘ν μ½ νμ μ μ±μ©νκ³ μλ€λ©΄ νλ‘ν μ½ νμ μΌλ‘ μΊμ€ν μ μλν©λλ€.
μ΄ λ μ±κ³΅μ μ΅μ λ<νλ‘ν μ½> νμ μ λ°ννκ³ , μ€ν¨μ nil μ λ°νν©λλ€.
λ°νμ μΊμ€νΈμ λλ€.
as! μ°μ°μλ as? μ μ μ¬νλ, μ±κ³΅μ νλ‘ν μ½ νμ μ λ°ννκ³ (κ°μ μΈλν) , μ€ν¨μ λ°νμ μλ¬κ° λ°μν©λλ€.
π‘νλ‘ν μ½ νμ μ Array μ, κ°νμ κ³Ό μ°Έμ‘°νμ, νμ μ λ€λ¦μ μκ΄μμ΄ νλ‘ν μ½μ μ±νν μ΄λ ν νμ λ μΊμ€ν λμ΄ λ€μ΄κ° μ μκ² λ©λλ€.
κ΄λ ¨ κΈ: λ€μ΄μΊμ€ν
λ!
λ€μ κΈ: Delegation - Protocols
'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Checking Type & Downcasting - Type Casting (0) 2021.01.21 Type Casting Overview - Type Casting (0) 2021.01.21 [Swift] νλ‘ν μ½ μμ±μ μꡬμ¬ν (Initializer Requirements) (0) 2021.01.19 [Swift] @main κ³Ό 컀μ€ν μνΈλ¦¬ ν¬μΈνΈ (2) 2021.01.19 Mutating Method - Methods (0) 2021.01.18