Closure
작성일
Passing data
- 5.Closure
- delegat와 비슷하다.
- closure도, 호출하는 부분과 작동되는 부분이 나누어져 있다.
Closure
class ClosureDetailViewController: UIViewController {
var myClosure: (() -> Void)?
/* 이렇게도 구현 가능하다
let myClosure: () -> Void = {
//로직을 써놓을순 있다.
}
*/
override func viewDidLoad() {
super.viewDidLoad()
}
}
clousure에서는, return이 없으면 Void라고 명시를 꼭 해줘야 한다,(함수이름이 없기 때문)
사용하는 방법은
class ClosureDetailViewController: UIViewController {
var myClosure: ((String) -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func closurePassData(_ sender: Any) {
myClosure?("closure string")
}
}
이런 방식으로 사용해주면 된다.
하지만 이렇게하면 호출부는 있지만, 바디 즉, 정의부가 없다 따라서,
@IBAction func moveToClosure(_ sender: Any) {
let detailVC = ClosureDetailViewController(nibName: "ClosureDetailViewController", bundle: nil)
detailVC.myClosure = { str in
self.dataLabel.text = str
}
self.present(detailVC, animated: true, completion: nil)
}
이렇게 사용할 때, 구현부를 만들어서 사용하는 것이다.(in 뒤에가 구현부이다.)