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 뒤에가 구현부이다.)