-
[Swift] - Autoclosuresλ?iOS/π Swift 2021. 3. 2. 20:32
μ€ν ν΄λ‘μ λ
ν¨μμ μκ·λ¨ΌνΈλ‘ μ λ¬ λ ννμμ λννμ¬ μλμΌλ‘ μμ±λλ ν΄λ‘μ μ΄λ€.
#μ΄λ¦μ μ λ: '{ }' μμ΄ ννμλ§ κ°μ§κ³ μλμΌλ‘ ν΄λ‘μ λ‘ μμ±λκΈ° λλ¬Έμ λλ€.
μ λ¬Έμ₯μ λ¬΄μ¨ λ»μΌκΉμ?
1. 'ννμμ λν νλ€λ κ²' μ ν΄λ‘μ κ° μλ κ²μ ν΄λ‘μ λ‘ λ§λ€μ΄ μ€λ€λ μλ―Έλ‘ μ¬μ©λμμ΅λλ€.
2. ν¨μ μ μλΆμ νλΌλ―Έν°μ νμ μμ @autoclosure μμ±μ λΆμ΄λ©΄, μκ·λ¨ΌνΈλ‘ λͺ μμ ν΄λ‘μ λμ ν΄λ‘μ μμ ννμλ§ μ λ¬νλ©΄ λ©λλ€.
func exampleFunc(param: @autoclosure () -> Int ) { ... }
νΉμ§ 1. μ€ν ν΄λ‘μ λ μ΄λ ν μκ·λ¨ΌνΈλ λ°μ§ μμ΅λλ€.
λμ μ€ν ν΄λ‘μ κ° νΈμΆλ λ λν λμ΄μλ ννμμ κ°μ λ°νν©λλ€.
μ€ν ν΄λ‘μ μλ λͺ λ°±ν ν΄λ‘μ ννμ λμ μΌλ°μ μΈ ννμμ μμ±νλ©΄ μλμΌλ‘ ν΄λ‘μ λ‘ λνλκΈ° λλ¬Έμ λΈλ μ΄μ€λ₯Ό μλ΅ν©λλ€.
μκ·λ¨ΌνΈλ‘ μ€ν ν΄λ‘μ λ₯Ό μ¬μ©νλ ν¨μλ€μ νΈμΆνλ μΌμ νν©λλ€.
νμ§λ§ μμ κ°μ μ’ λ₯μ ν¨μλ€μ ꡬννλ μΌμ ννμ§ μμ΅λλ€.
μ μμλ ꡬν보λ€λ μ½λλ₯Ό μ΄ν΄νκΈ° μνμ¬ μ€ν ν΄λ‘μ λ₯Ό 곡λΆνμμ΅λλ€.
νΉμ§ 2. μ€ν ν΄λ‘μ λ νκ°λ₯Ό μ§μ°μμΌμ€λλ€.
μλνλ©΄ ν΄λ‘μ λ νΈμΆλκΈ° μ κΉμ§ λ΄λΆ μ½λλ₯Ό μ€νμν€μ§ μκΈ° λλ¬Έμ λλ€.
νκ°λ₯Ό μ§μ°μν¨λ€?
νκ°(evaluate) = ννμμ μ€νμν¨λ€ (run the code)
νκ°μ μ§μ°μ μ¬μ΄λ μ΄ννΈκ° μλ μ½λλ, κ³μ° λΉμ©μ΄ λ§μ΄ λλ μ½λμ μ μ©ν©λλ€.
κ΄λ ¨ κΈ: μ¬μ΄λ μ΄ννΈ
μ°λ¦¬κ° μ½λκ° νκ°λλ μμ μ μ μ΄ν μ μκΈ° λλ¬Έμ λλ€.
μλμ μ½λλ ν΄λ‘μ κ° μ΄λ»κ² νκ°λ₯Ό μ§μ°μν€λμ§ λ³΄μ¬μ£Όκ³ μμ΅λλ€.
var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"] print(customersInLine.count) // Prints "5" // customProvider κ° νΈμΆλλ μμ μ μ€νλ©λλ€. /* 1 */ //() -> String νμ μ ν΄λ‘μ ( remove(at: ) ν¨μλ ν΄λ‘μ νΈμΆμμ μ€νλ¨ ) let customerProvider = { customersInLine.remove(at: 0) } /* 2 */ // String νμ μ μμ ( remove(at: ) ν¨μκ° λ°λ‘ μ€νλ¨ ) let customerProvider2 = customersLine.remove(at: 0) print(customersInLine.count) // Prints "5" // remove(at:) μ΄ μ€νλλ μμ print("Now serving \(customerProvider())!") // Prints "Now serving Chris!" print(customersInLine.count) // Prints "4"
customersInLine λ°°μ΄μ 첫 λ²μ§Έ elementκ° ν΄λ‘μ λ΄λΆμ μ½λμμ μμ λμμ§λ§, ν΄λ‘μ κ° μ€μ λ‘ νΈμΆλκΈ° μ κΉμ§λ μμ λμ§ μμ΅λλ€.
ν΄λ‘μ κ° μ΄νμλ νΈμΆλμ§ μλλ€λ©΄, ν΄λ‘μ λ΄λΆμ ννμμ μ λλ‘ νκ°λμ§ μμ κ²μ΄λ©°, λ°λΌμ λ°°μ΄μ elementλ μμ λμ§ μμ κ²μ λλ€.
μ¬κΈ°μ customerProvider λ () -> String νμ μ ν¨μμμ μΈμ§ν΄μΌ ν©λλ€.
무μμ λ§νκ³ μΆμμ§λ μ μ½λμ /* 1 */ μ /* 2 */ μ½λλ₯Ό λΉκ΅ν΄λ³΄λ©΄ μ΄ν΄ν μ μμ΅λλ€..
ν¨μμ μκ·λ¨ΌνΈλ‘ ν΄λ‘μ λ₯Ό μ λ¬ν λλ λμΌν λμμ κΈ°λν μ μμ΅λλ€.
ν΄λ‘μ λ₯Ό νλΌλ―Έν°λ‘ μ λ¬ν λ, ν΄λ‘μ λ μ€νλμ§ μκΈ° λλ¬Έμ μμ ννμμ΄ νκ°λμ§ μκ³ , ν¨μ λ΄λΆμμ νΈμΆν λμ νκ°λλ κ²μ λλ€. (= νκ°μ μ§μ° )
// customersInLine is ["Alex", "Ewa", "Barry", "Daniella"] // λͺ μμ ν΄λ‘μ λ₯Ό νλΌλ―Έν°λ‘ λ°λ ν¨μ func serve1(customer customerProvider: () -> String) { print("Now serving \(customerProvider())!") } serve(customer: { customersInLine.remove(at: 0) } ) // Prints "Now serving Alex!" // μ€ν ν΄λ‘μ λ₯Ό νλΌλ―Έν°λ‘ λ°λ ν¨μ func serve2(customer customerProvider: @autoclosure () -> String) { print("Now serving \(customerProvider())!") } serve(customer: customersInLine.remove(at: 0) )
serve(customer:) ν¨μλ μ€ν ν΄λ‘μ κ° μλ κ³ κ°μ μ΄λ¦μ λ°ννλ κΈ°λ₯μ νλ λͺ μμ ν΄λ‘μ λ₯Ό λ°κ³ μμ΅λλ€.
λͺ μμ ν΄λ‘μ λ { } (Curly Braces) λ‘ κ°μΈμ Έ μλ λ¬Έλ²μΌλ‘ μμ±λ ν΄λ‘μ λ₯Ό μλ―Έν©λλ€.
μ€ν ν΄λ‘μ λ₯Ό ν΅ν΄ λμΌν λμμ κΈ°λνλ €λ©΄ μ¬μ©νλ €λ νλΌλ―Έν°μ νμ μμͺ½μ @autoclosure μμ±μ λΆμ¬μ£Όλ©΄ λ©λλ€.
κ²°λ‘
μ€ν ν΄λ‘μ λ₯Ό μ¬μ©νλ κ²κ³Ό λͺ μμ ν΄λ‘μ λ₯Ό μ¬μ©νλ κ² μ°¨μ΄μ μ
μ€ν ν΄λ‘μ λ₯Ό μ¬μ©νλ ν¨μλ₯Ό νΈμΆν λ, { } κ° μλ ννμλ§ μ λ¬ν΄λ μμμ ν΄λ‘μ λ‘ λνν΄ μ€λ€λ κ²μ λλ€.
μλμ μ½λλ₯Ό 보면
serve2(customer:)λ λ§μΉ remove(at: ) μ λ°ν κ°μΈ
String νμ μ νλΌλ―Έν°λ‘ λ°λ κ² κ°μ§λ§, μ¬μ€μ ν΄λ‘μ λ₯Ό λ°λ κ²μ΄λΌλ κ²!
λ§€μ° μ€μ!!
λλ¬Έμ μ½λλ₯Ό μ½λ μ¬λμκ² νΌλμ μ€ μ μμ΅λλ€.
// <λͺ μμ ν΄λ‘μ λ₯Ό μ λ¬νμ¬ νΈμΆ> '{ }' λΈλ μ΄μ€λ₯Ό λ£μ΄μ£Όμ΄ λͺ μμ μΌλ‘ ν΄λ‘μ λ₯Ό νν serve1(customer: { customersInLine.remove(at: 0) }) // <μ€ν ν΄λ‘μ λ₯Ό μ λ¬νμ¬ νΈμΆ> '{ }' λΈλ μ΄μ€ μμ΄ ννμλ§ μ λ¬ serve2(customer: customerInLine.remove(at: 0))
+ ) μ€ν ν΄λ‘μ λ νν ν΄λ‘μ (trailing closures) λ‘ κΈ°μ ν μ μμ΅λλ€. ( μ»΄νμΌ μλ¬ νμΈ )
νν ν΄λ‘μ μ syntax λ λͺ μμ ν΄λ‘μ μ μ λ¬κ³Ό κ²°κ΅ κ°μμ§λ―λ‘ κ·Έλ° κ² κ°μ΅λλ€.
N O T E
Context μ ν¨μ μ΄λ¦μ ν΅ν΄ νκ°κ° μ§μ°λμμμ λͺ νν ν΄μ£Όμ΄μΌ μ΄ν΄κ° μ΄λ €μ΄ μ½λκ° λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
λ!
'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Dictionary κ°λ¨ μ 리 (0) 2021.03.16 [Swift] Enumeration μ΄μ 리 (0) 2021.03.10 [Swift] - Subscripts (μλΈμ€ν¬λ¦½νΈ) (0) 2021.02.19 Access Control (μ κ·Ό μ μ΄) (0) 2021.02.17 Computed Properties (κ³μ° μμ±) - Properties (0) 2021.02.02