iOS

[ iOS ] 데이터 전달 : (1/5) Property로 전달하기

Forest Yun 2022. 6. 20. 17:56
728x90

문제

다양한 방법으로 데이터 전달하기

 

 

1. Property로 전달하기

2. DelegatePattern으로 전달하기

3. NotificationCenter로 전달하기

4. Closure로 전달하기

5. 장단점 정리

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

Property로 전달하기

1 - 2  화면 전환할 경우, 1의 ViewContorller에서 2의 ViewController의 프로퍼티에 데이터를 할당해 전달하는 방법이다. 데이터 할당은 보통 화면 전환 시 이루어지며, 그때 생성하는 2의 ViewController 객체를 활용한다.

 

 

 

 

 

 

먼저 1에서 데이터를 입력할 TextField의 아울렛 변수(contentTextField)와 화면 전환을 할 Button의 액션 함수(tapNextButton)를 정의한다. 

import UIKit

class PropertyViewController: UIViewController {
    //MARK: - 아울렛 변수
    @IBOutlet weak var contentTextField: UITextField! //데이터 입력
    @IBOutlet weak var contentLabel: UILabel! //추후 사용될 변수
    
    //MARK: - 라이프 사이클
    override func viewDidLoad() {
        super.viewDidLoad()
        
        configureView()
    }
    
    //MARK: - 화면 구성
    private func configureView(){
        self.contentLabel.text = nil //Label 초기화 목적
    }
    
    //MARK: - 액션 함수
    @IBAction func tapNextButton(_ sender: UIButton) {
    }
}

 

 

 

 

 

tapNextButton은 화면 전환 역할을 하는 액션함수로, 여기서 프로퍼티 데이터 전달이 이루어진다.

2의 storyboard id와 instantiateViewController(withIdentifier:)를 사용해 ViewController의 객체를 생성한다. 2의 ViewController, 즉 DelegatePatternViewController의 프로퍼티를 사용할 것이기 때문에 DelgatePatternViewController로 다운캐스팅한다. (UIViewController -> DelegatePatternViewController) 

그 후 해당 객체를 사용해 원하는 프로퍼티에 접근하여 데이터를 할당한다. 

//MARK: - 액션 함수
    @IBAction func tapNextButton(_ sender: UIButton) {
    	//만약 다른 storyboard에 있다면 해당 storyboard 객체 생성
        let storyboard = UIStoryboard(name: "DelegatePattern", bundle: Bundle.main)
        guard let delegatePatternViewController = storyboard.instantiateViewController(withIdentifier: "DelegatePatternViewController") as? DelegatePatternViewController else {return}
        
        //프로퍼티로 데이터 할당
        delegatePatternViewController.content = self.contentTextField.text
        
        self.navigationController?.pushViewController(delegatePatternViewController, animated: true)
    }

 

 

 

아울렛변수는 외부에서 접근할 수 없으므로 프로퍼티에 값을 할당한 다음, LifeCycle에 맞춰 DelegatePatternViewController에서 아울렛 변수에 프로퍼티 값을 할당해야한다.

import UIKit

class DelegatePatternViewController: UIViewController {
    //MARK: - 아울렛 변수
    @IBOutlet weak var contentLabel: UILabel!
    
    //MARK: - 프로퍼티
    var content: String?
    
    //MARK: - 라이프 사이클
    override func viewDidLoad() {
        super.viewDidLoad()
        
        configureView()
    }
    
    //MARK: - 화면 구성
    private func configureView(){
        self.contentLabel.text = content //아울렛 변수에 프로퍼티 값 할당
    }
}

 

 

 

 

 


 

 

 

 

 

 

 

728x90