투케이2K

42. (TWOK/ALGORITHM) [Ios] 패턴 - 딜리게이트 (delegate) 패턴 사용해 대리자, 위임자 확장 기능 처리 실시 본문

투케이2K 알고리즘

42. (TWOK/ALGORITHM) [Ios] 패턴 - 딜리게이트 (delegate) 패턴 사용해 대리자, 위임자 확장 기능 처리 실시

투케이2K 2022. 7. 14. 12:40

[환경 설정 및 설명]

언 어 : Ios

설 명 : 패턴 - 딜리게이트 (delegate) 패턴 사용해 대리자, 위임자 확장 기능 처리 실시

 

[ProtocolUtil 클래스]

 
import UIKit

// [protocol 정의 실시 : 클래스 외부에 선언]
protocol SendData {
    
    // [인풋 파라미터 : 뷰 컨트롤러 , String 데이터]
    func sendValue(_vc: UIViewController, _value : String)
}
 

[MainController 클래스]

import UIKit

class MainController: UIViewController {
    
    
    // [뷰 컨트롤러 메모리 로드 수행 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        print("")
        print("==============================")
        print("[MainController > viewDidLoad : 뷰 컨트롤러 메모리 로드 수행 실시]")
        print("==============================")
        print("")
    }
    
    
    // [뷰 컨트롤러 화면에 표시됨]
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("===============================")
        print("[MainController > viewDidAppear() : 뷰 컨트롤러 화면 표시 수행 실시]")
        print("===============================")
        print("")
    }
    
    
    // [메인 >> 서브 인텐트 이동 클릭 이벤트 지정]
    @IBAction func subIntentAction(_ sender: Any) {
        print("")
        print("===============================")
        print("[MainController > subIntentAction() : 메인 > 서브 인텐트 이동 클릭 이벤트 발생]")
        print("===============================")
        print("")
        
        
        // [인텐트 화면 지정]
        guard let SubVC = self.storyboard?.instantiateViewController(identifier:"SubVC") as? SubController
        else {
            return
        }
        
        
        // [서브 뷰 컨트롤러에서 전달 받은 데이터를 받기 위해 딜리게이트 지정]
        // [서브] 뷰 컨트롤러에서 전달해준 데이터를 받기 위한 경로 : [메인] 쪽에서 extension 정의 후 데이터 받아서 처리 실시
        SubVC.delegate = self
        
        
        SubVC.modalPresentationStyle = .fullScreen // [전체 화면]
        self.present(SubVC, animated: false, completion: nil) // [화면 전환]
    }
    
} // [클래스 종료]


// [extension 확장 기능 정의 실시 : 딜리게이트 전달 받은 데이터 처리 부분]
extension MainController: SendData {
    
    // [프로토콜에 정의된 메소드 몸체 구현 실시 >> [서브] 뷰컨트롤러에서 전달 받은 데이터 사용]
    func sendValue(_vc: UIViewController, _value: String) {
        print("")
        print("===============================")
        print("[MainController > extension : SendData : sendValue : 딜리게이트 전달 받은 메시지 확인]")
        print("[데이터 : \(_value)]")
        print("===============================")
        print("")
    }
}
 

[SubController 클래스]

 

import UIKit

class SubController: UIViewController {
    
    
    // [프로토콜 : SendData 변수 선언]
    var delegate : SendData?

    
    // [뷰 컨트롤러 메모리 로드 수행 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        print("")
        print("==============================")
        print("[SubController > viewDidLoad : 뷰 컨트롤러 메모리 로드 수행 실시]")
        print("==============================")
        print("")
    }
    
    
    // [서브 >> 메인 인텐트 이동 클릭 이벤트 지정]
    @IBAction func mainIntentAction(_ sender: Any) {
        print("")
        print("===============================")
        print("[SubController > mainIntentAction() : 서브 > 메인 인텐트 이동 클릭 이벤트 발생]")
        print("===============================")
        print("")
        
        
        // [딜리게이트로 데이터 전달 수행 실시]
        // [파라미터 : _vc (뷰 컨트롤러) / _value (문자열 데이터)]
        delegate?.sendValue(_vc:self, _value: "subEnd")
        
        
        // [dismission 현재 뷰 컨트롤러 닫기 수행 실시]
        self.dismiss(animated: false, completion: nil)
    }
    
} // [클래스 종료]

[참고 사이트]

https://kkh0977.tistory.com/1569

 

45. (swift/xcode) delegate 딜리게이트 사용해 뷰 컨트롤러 간 데이터 공유 수행 실시 - 인텐트 데이터

[개발 환경 설정] ​ 개발 툴 : XCODE 개발 언어 : SWIFT [사용 클래스 : 스토리 보드에서 Main , Sub 버튼 생성 필요] ​ [ProtocolUtil 클래스] ​ import UIKit // [protocol 정의 실시 : 클래스 외부에 선언..

kkh0977.tistory.com


 

반응형
Comments