본문 바로가기

IT/Swift

UITableView.ReloadData 그리고 delegate

유니티할때도 언급했지만 역시 나는 코딩을 할 재목이 안된다..

얼렁 다른 벌이를 찾아서 프로그래밍 고만하고 싶다. 공부할때마다 스스로가 너무 ㅂㅅ같고 멍청한거 같다.

각설하고


지금까지는 그냥 책이나 다른 코드에서 UITableView.ReloadData를 쓰니까 걍 쓰나보다 했는데,

이놈이 결국 밑에에 생성자 같은 놈을 부르는 것이였던 것이였다!!!!


func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

        let headerView = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "HeaderProfileCollectionReusableView", for: indexPath) as! HeaderProfileCollectionReusableView

        if let user = self.user{

            headerView.user = user

        }

        return headerView

    }

결국 리로드데이타를 부르지않으면 아무리 데이타를 다시 입력해봤자 화면에는 아무런 영향을 미치지 못한다.

물론 이건 금방 할수 있었다. 나도 그렇게 바보는 아니니까..


근데 유저값이 없는데로 에러가 안나고 화면이 전환이 되지? 라고 혼자 엄청끙끙 알고 있었는데. 그거슨 바로!!


if let user = self.user{

            headerView.user = user

        }

        return headerView


옵션값을 언랩핑할때 널이면 걍 넘어가니 아무런 문제가 없었던 것이였다.

강의를 들으면서도 왜 이놈만 이렇게 래핑하는데  신경써서하지 라고 궁금하긴 했는데, 다 이유가 있었던것이였다.

강사가 처음부터 의도를 애기해줬으면 덜 고생했을꺼 같은데....뭐 뻘짓도 의미가 있으니까.




그리고 두번째는 델리게이션!

델리 게이션!!! 이건 뭐 무적이더만..


갑, 을, 병 3개의 뷰가 있다고 하자.


갑안에 을이 있고 병이 갑을 부른다. 

병이 갑을 부르는것까지는 아무런 문제가 없다 걍 segue로 불러 재끼면 되니까.


근데 문제는 여기에 있다. 


만약 을에서 병의 데이타를 접근하고 싶다면?

을...에서 병......


프로그래밍 아주 쬐금만 해본사람도 알겠지만, 결국 코딩이란 

자료선언 그리고 반복문 조건문으로 끝난다..

뭐 문법이고 최적화고 그딴거 다 때려치우고,

걍 자료 선언하고 돌리면서 필요한거 빼서 쓰면 되는거다.


근데..여기서 문제가 하나더 있는데 그거슨 바로 각 덩어리들간의 데이타 통신이라고 하겠다.

함수와 함수간

구조체간 클래스간

각 덩어리든 간에 통신을 얼마나 잘 구성하느냐에 따라서 객체지향이되느냐

아니면 걍 개떡같은 쫄깃쫄깃한 코드가 되느냐....(클래스는 나누었지만 결국 하나인 클래스가 되어버리는 신기하 현상)


뭐 막 코딩하면 어떻게된 된다.  근데 그러면 나중에 정말 힘들어 지고,

객체지향 즉 클래스간 서로 독립성을 보장해주면서 코딩을 하는게 베스트라고 할수 있다.


그러기 위해서 델리게이션이 있는데, 나도 원래는 기본은 쓸줄아는데...


갑에서 을을 델리게이션해서 쓸수는 있다.


근데 갑을 부르는 병에서 을을 델리게이션?

이게 가능한거임? 


근데 가능하다. 방법은 정말 느므느므 간단한다.



갑에서 을의 델리게이션은 변수로 만들고 병에서 갑을 부를때 갑안에 있는 을의 델리게이션변수에 자신을 넣는다.

그리거 병에서 을을 델리게이션 할수 있다.


데이타 전달은 segue와 prepare를 이용하면 어떤 데이타든지 옮길수 있다.


나름 감동 했다는.....델리게이션 쩔어요!