카테고리 없음

swift 프로토콜로 데이터 업데이트 하기 ~

kingarthur 2024. 9. 11. 18:37

일단 프로필 정보를 만들면 업데이트 해줘야하는데 그걸 한번 구현해봤다. 

 

protocol EditProfileDelegate: AnyObject {
    func didUpdateProfile(image: UIImage?, name: String, goal: String, memo: String)
}

 먼저 수정하는 뷰컨에 델리게이트를 선언해준다. 

 

weak var delegate: EditProfileDelegate?

    @objc func doneButtonTapped(_ sender: UIButton) {
        // Assuming these outlets exist and are correctly connected
        let updatedProfileImage = editProfileView.profileImageView.image
        let updatedName = editProfileView.nameTextField.text ?? ""
        let updatedGoal = editProfileView.goalTextField.text ?? ""
        let updatedMemo = editProfileView.memoTextView.text ?? ""

        // Notify delegate of updates
        delegate?.didUpdateProfile(image: updatedProfileImage, name: updatedName, goal: updatedGoal, memo: updatedMemo)

        // Dismiss the view controller
        dismiss(animated: true, completion: nil)
    }

 완료 버튼이 누르면 프로토콜로 선정해놓은 것을 업데이트 정보를 보내준다 

 

    @objc private func EditProfileButtonTapped() {
        let editProfileVC = EditProfileViewController()
        editProfileVC.delegate = self // delegate 설정
        let navigationController = UINavigationController(rootViewController: editProfileVC)
        navigationController.modalPresentationStyle = .fullScreen
        present(navigationController, animated: true, completion: nil)
    }

나는 여기서 델리게이트 설정을안해서... 업데이트 안되는 오류가 있었느데 델리게이트 빼먹지 말자 

프로필 뷰 컨에서 수정하는 프로필 뷰컨으로 넘어갈때 델리게이트 셀프로 넣어주면된다. 

 

extension ProfileViewController: EditProfileDelegate {
    
    func didUpdateProfile(image: UIImage?, name: String, goal: String, memo: String) {
        // Update profile image
        profileView.profileImageView.image = image

        // Update name in navigation bar
        self.navigationItem.title = name

        // Update goal label
        profileView.goalLable.text = goal

        // Update memo text view
        profileView.memoLabel.text = memo
    }
}

 확장으로 델레게이트 어디에 업데이트 되는지 설정을 해놓으면 된다.

 

그러면 완성 ~

 

까먹지 말자델리게이트