μλ
νμΈμ Fomaπ μ
λλ€!
μ€λμ ν΄λ‘μ Έκ° μ μ°Έμ‘°νμ μΈμ§μ λν΄μ μμλ³΄λ €κ³ ν©λλ€!
λ°λ‘ μμν κ²μ~
ν΄λ‘μ Έλ?
ν΄λ‘μ Έλ μ΄λ¦μ΄ μ ν΄μ Έμμ§ μμ ν¨μ μ¦, μ΅λͺ ν¨μμ λλ€!
(μλ°ν λ§νλ©΄ λͺ¨λ ν¨μλ₯Ό λ»νκΈ°λ ν©λλ€.)
μΌκΈ κ°μ²΄λ‘μ¨ μν μ νλ―λ‘ μΈμλ‘ λ³΄λΌ μλ μκ³ λ°νκ°μ μ λ¬νκ±°λ μ μ₯ν μλ μμ΅λλ€.
λ³΄ν΅ ν¨μλ μλμ κ°μ΄ μμ±λμ΄ μμ£ ?
func hello() -> String {
return "hello"
}
ν΄λ‘μ Έλ μλμ κ°μ΄ ν¨μλͺ μ΄ μμ΄ ν¨μμ κ°μ μν μ ν μ μμ΅λλ€.
let hello:(()->String) = { return "hello"}
ν΄λ‘μ Έμ λν κΈμ΄ μλλ―λ‘ κ°λ¨νκ²λ§ μ€λͺ νκ³ λμ΄κ°κ²μ~
μ°Έμ‘° νμ μ΄λ?
μ°Έμ‘° νμ μ κ°μ²΄μ μ£Όμλ₯Ό λ©λͺ¨λ¦¬μ μ μ₯ν΄μ μ¬μ©ν λ κ·Έ μ£Όμλ₯Ό μ°Έμ‘°νλ νμ μ λλ€.
κ³ λ‘ λ©λͺ¨λ¦¬ μμμμ λμ ν λΉ λ©λͺ¨λ¦¬ μμμΈ "ν" μμμ μ μ₯λμ΄ μμ΅λλ€.
κ³ λ‘ ν΄λΉ μ£Όμμ κ°μ΄ μ¬λΌμ§λ μμ μ λ©λͺ¨λ¦¬ ν΄μ λ₯Ό μ ν΄μ€μΌ λ©λͺ¨λ¦¬ λμκ° λ°μνμ§ μμ΅λλ€.
κ·Όλ° μ ν΄λ‘μ Έλ μ°Έμ‘° νμ μ΄μΌ? π€¨
μμμ λ μμλ‘ μλμ κ°μ ν¨μλ StringμΌλ‘ λ "hello"λΌλ κ°μ κ°μ§κ³ μμ΅λλ€.
let hello:(()->String) = { return "hello"}
μ ν΄λ‘μ Έμ²λΌ μμ νμ μ κ°μ§κ³ μλλ° μ μ°Έμ‘° νμ μΌκΉ? λΌλ μκ°μ΄ λ€μμ΅λλ€.
μ΄μ¬ν μ°Ύμλ³Έ κ²°κ³Ό μ΄μ λν ν΄λ΅μ "ν΄λ‘μ Έλ κ°μ μΊ‘μ³νλ€" μ λλ€.
μ΄κ² λ¬΄μ¨ μλ―ΈμΈμ§ μ²μ²ν μ€λͺ
ν΄λ릴κ²μ!
λ€μκ³Ό κ°μ΄ ν΄λ‘μ Έμ νλΌλ―Έν°κ° μλ κ²½μ° ν΄λΉ νλΌλ―Έν°λ‘ μ λ¬λ κ°μ μ¬μ©ν μ μμ΄μΌκ² μ£ ?
let hello:((_ name:String)->String) = { name in return "\(name) hello"}
hello("foma") //foma hello
μ΄ λ ν΄λ‘μ Έλ κ°μ "μΊ‘μ³" ν΄μ μ μ₯ν΄λκ² λ©λλ€.
λ§μ½ μλμ κ°μ΄ κ°μ²΄κ° νλΌλ―Έν°λ‘ λ°λ κ²½μ°λ μ΄λ»κ² ν κΉμ?
class Person {
var name:String
init(name:String) {
self.name = name
}
}
let person = Person(name: "foma")
let hello:((_ person:Person)->String) = { person in return "\(person.name) hello"}
hello(person) //foma hello
ν΄λ‘μ Έλ κ°μ "μΊ‘μ³"ν λ νλΌλ―Έν°λ‘ λ€μ΄μ¨ νμ μ λ°λΌμ κ°μ "μΊ‘μ³"νκ² λ©λλ€.
μ¦, μ°Έμ‘°νμ μ΄ λ€μ΄μ€λ©΄ ν΄λ‘μ Έλ μ°Έμ‘°νμ μΌλ‘ κ°μ "μΊ‘μ³" ν΄λλλ€λ μλ―Έμ΄μ£ !
νμΆ ν΄λ‘μ Έ
μ΄λ¬ν μλ¦¬λ‘ νμΆ ν΄λ‘μ Έλ μ°Έμ‘° νμ μ κ°μ μΊ‘μ³ν΄λκ³ μλ€κ° ν¨μκ° λλ λ€μλ κ°μ μ λ¬ν μ μλ κ²μ΄μ£ !
μλλ escaping ν¨μκ° 2μ΄ λ€μ μ€νλλλ‘ ν΄λκ³ κ·Έ λ€μ personμ μ΄λ¦μ granμΌλ‘ λ°κΏλ³΄κ² μ΅λλ€.
μ΄λ κ² νλ©΄ μ°Έμ‘°ν κ°μ΄ λ°λμμΌλ―λ‘ 2μ΄ λ€μ μΆλ ₯λλ κ°λ λ°λ κ°μΈ "gran hello" κ° μΆλ ₯λκ² λ©λλ€.
class Person {
var name:String
init(name:String) {
self.name = name
}
}
let person = Person(name: "foma")
let hello:((_ person:Person)->String) = { person in return "\(person.name) hello"}
func escaping(completion:@escaping(Person)->String) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
print("From Escaping Closure",completion(person))
}
}
escaping(completion: hello) //gran hello
person.name = "gran"
Weak Self
νμμ ν΄λ‘μ Έμ λ°λ λΆλΆ μμ [weak self] κ° μλ κ²μ λ§μ΄ λ³΄μ ¨μκ±°μμ!
μ΄κ² λν κ°μ μλ¦¬λ‘ λ·°μ»¨νΈλ‘€λ¬μ ν΄λ‘μ Έ λͺ¨λ μ°Έμ‘° νμ μ΄λ―λ‘ μλ‘ κ°νκ² μ°κ²°λλ 리ν μΈ μ¬μ΄ν΄μ
λ°©μ§ν΄ λ©λͺ¨λ¦¬ λμλ₯Ό λ§μμ£Όλ κ²μ λλ€.
class ViewController: UIViewController {
@IBOutlet weak var nameLabel:UILabel!
override func viewDidLoad() {
super.viewDidLoad()
escaping {[weak self] person in
self?.nameLabel.text = person.name
}
}
func escaping(completion:@escaping(Person)->Void) {
let person = Person(name: "foma")
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
print("From Escaping Closure",completion(person))
}
}
}
μ€λμ μ΄λ κ² ν΄λ‘μ Έκ° μ°Έμ‘°νμ μΈ μ΄μ μ λν΄μ μμ보μμ΅λλ€.
νΉμλΌλ κΆκΈνμ μ μ΄ μκ±°λ νλ¦° λΆλΆμ΄ μλ€λ©΄ μΈμ λ λκΈλ‘ μλ €μ£ΌμΈμ!
'π Language > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[RxCocoa] bindλ? (0) | 2021.07.05 |
---|---|
[Swift] deferλ? (0) | 2021.05.27 |
[Swift] Enumμ΄λ?(feat. μ¨μΌνλ μ΄μ ) (0) | 2021.04.28 |
[RxSwift] Combining Observables μμ보기 (Combine Latest,Zip, Merge,Concat,withLatestFrom) (0) | 2021.04.07 |
[Swift] λμ λ리λ₯Ό κ°μ²΄λ‘ , κ°μ²΄λ₯Ό λμ λλ¦¬λ‘ λ°κΎΈλ λ² (Dictionary to object , Object to dictionary) (4) | 2021.03.09 |
λκΈ