Instagram 회고 (2)

이건준·2022년 3월 23일
0

문제제기

-> Instagram 코딩을 하면서 나에게 유용할것들 혹은 이해가 되지않았던 부분에 대한 예시를 위한 글

문제해결

1. 프로토콜, 열거형, 구조체의 사용을 자주 하기


-> 항상 Swift코딩을 해오면서 잘하는 사람과 못하는 사람의 차이를 꼽으라하면 여러가지가 있겠지만 프토토콜, 열거형, 구조체를 얼마나 잘 활용하냐였던것같다

-> 위 코드에서도 FormTableViewCellDelegate라는 프로토콜을 만들어주었고 이를 이용하여 cell에서 입력한 text를 원하는 Controller에게 위임하여 받아줄 수 있게끔 구현하고싶었다

-> 첫째로 weak나 unowned키워드를 사용하기위해선 이 프로토콜이 클래스를 위한 프로토콜인지 명시해주어야하기때문에 AnyObject를 넣어주어 순환참조문제를 일으키게 하지않기위해 weak를 사용해주어 옵셔널값으로 만들어주었다

-> 이후 원하는 EditProfileViewController에서 delegate = self를 통해 받아주어 extension을 이용하여 구현해주었고 print문을 찍어준 결과 올바르게 text값이 들어왔다
-> 위 코드에서 enum을 이용하여 각 case마다 url을 다르게 지정해주어 present하게 하였다

-> 직접 써보니 enum의 장점으로는 case문으로 분기처리할 수 있어서 switch문을 사용할때 default문을 사용하지않아도 된다는점

-> 그리고 그냥 무작정 urlString을 인자로 받아와 하드코딩해버리면 추후에 이게 왜 이렇게 보냈는지 같이 협업하는 사람들이 보기좋지않은 코드일것이다

-> 하지만 위처럼 enum을 이용하여 terms, privacy, help 이런식으로 명시해주어 분기처리해준다면 추후에 보는 개발자입장에서도 편리한 코드가 될것이다

2. UITableViewCell의 contentView

-> 내가 contentView를 알게된것은 항상 addSubView를 이용하여 View를 추가한 이후에 제약조건을 걸고있어서 UITableViewCell도 마찬가지고 self.addSubView를 통해 버튼을 추가했었는데

-> 추가한 버튼의 액션함수가 실행되지않았고 그때 contentView에 추가해야 눌릴 수 있다는 오버플로우의 답을 받았던 경험이 있다
-> 그래서 contentView를 더 찾아보니 애초에 애플문서에서도 cell에 대해 view를 추가하기위해서 이 뷰에 추가하라고 써있었다,,,

-> 메모,,,

-> UITableView에서 따로 custom cell을 만들어서 header나 footer를 넣을 수도 있지만 위처럼 tableView.tableHeaderView를 통해서도 쉽게 넣을 수 있다

-> 내가 기존에 translate~메소드를 이용하여 오토레이아웃을 집어넣는 코딩을 많이 해왔었는데 이번에 headerView를 넣을때 그런식으로 넣어버리니까 tableView위에 headerView가 애매하게 끼는 현상이 나왔다

-> 난 당연히 headerView로 넣어주면 알아서 tableView의 일원이니 맞춰질줄 알았는데 제약조건이 그렇게 만드는거같아보여 그냥 frame을 통해 전달하니 이쁘게 완성되었다

0개의 댓글