-
segue(세그웨이)는 swift에선 ViewController 간의 전환하는 용도로 사용하는 라이브러리인데 ViewController가 하나의 화면을 담당하므로 화면 전환을 위한 라이브러리라고 봐도 될 것 같다. segue 가 포르투갈어로 팔로우라는 뜻을 가지고 있으니 단어의 의미와 함께 용도를 기억하면 좋을 것 같다.
세그웨이는 뷰 컨트롤러간의 연결을 통해서 만들수 있다. 스토리보드에서 작업중인 두개의 뷰컨트롤러중 화면전환이 시작되는 곳에서 도착지점까지 컨트롤을 눌러서 쭉 끌어준다. 실제 코드에 바인딩 해줄때 처럼 말이다.
옮기고 나면 위 그림의 파란색 박스로 표시한 새로운 아이템이 생긴다. 클릭하면 오른쪽 상단에서 세부 속성을 정의해 줄 수 있는데 identifier와 종류를 선택할 수 있다. identifier는 화면 전환 이벤트의 id와 같은 개념이고 kind는 새로운 view controller를 어떻게 띄워줄지를 선택 할 수 있다. 선호하는 방식대로 띄워주면 된다.
스토리보드에서 화면 전환에 대해서 정의한 후 ViewController에선 앞서 정의한 액션을 호출하는 역할을 한다. 아래 코드를 보면 calculatePressed 라고 스토리보드에 바인딩된 함수에서 performSegue 함수를 호출한다. 이때 withIdentifier에 들어가는 인자를 보면 아까 스토리보드에서 정의한 identifier와 동일한 값이 들어가있는걸 볼 수 있다. identifier 값을 확인해서 어떤 세그웨이를 사용할 지 선택하는 것이다.
@IBAction func calculatePressed(_ sender: UIButton) { print(heightSlider.value) print(weightSlider.value) let height = heightSlider.value let weight = weightSlider.value calculatorBrain.updateBmi(height, weight) self.performSegue(withIdentifier: "goToResult", sender: self) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "goToResult" { let destinationVC = segue.destination as! ResultViewController destinationVC.bmiValue = calculatorBrain.bmi } }
performSegue 함수를 호출하면 아래 오버라이딩된 prepare 함수가 호출되는데 이때 어떤 세그웨이가 호출됐는지 인자를 확인 할 수 있고 새로 생성된 ViewController 함수를 볼 수 있다. 위 코드를 보면 세그웨이의 도착점을 ResultViewController 클래스로 타입 캐스팅 한 것을 볼 수 있다. 그리고 새로운 ViewController에 전달하고 싶은 bmiValue를 입력하고 있는 것도 볼 수 있다.