junu0516 / airbnb

에어비앤비 클론코딩
1 stars 2 forks source link

3week PR 날리기 #63

Closed Jinsujin closed 2 years ago

Jinsujin commented 2 years ago

리뷰어님께

이번주에는 새로운 기능 구현 보다는 테스트를 작성해 보면서 저희가 설계한 구조를 검증하기로 했습니다. 레나가 제안해주신 자료를 바탕으로 추가적으로 공부해 보고 조금 더 나은 방향이 있는지 여러 시도를 하고 있습니다. 이번 PR 도 잘 부탁드립니다!

작업

02. Property wrapper 를 사용해 중복코드 제거하기

문제점

코드로 뷰의 레이아웃을 잡기 위해 모든 view에 translatesAutoresizingMaskIntoConstraints = false 를 해 줘야 하는 문제가 있다.

let headerView = SearchResultRoomsHeaderView()
headerView.translatesAutoresizingMaskIntoConstraints = false

property wrapper 를 사용하면 이러한 중복코드를 한번 감싸서 숨길 수 있다.

property wrapper 의 정의는 아래처럼 할 수 있다:

@propertyWrapper
struct CodableLayoutView<T: UIView> {
    private var view: T = T()
    var wrappedValue: T {
        get {
            self.view.translatesAutoresizingMaskIntoConstraints = false
            return view
        }
        set { view = newValue }
    }
    init(view: T) {
        self.view = view
    }
}

이 property wrapper 를 이용하는 코드는 다음과 같다:

@LayoutCodable(view: stackView) var layoutStackView
self.addSubview(stackView)

NSLayoutConstraint.activate([
    layoutStackView.topAnchor.constraint(equalTo: topAnchor),
    layoutStackView.leadingAnchor.constraint(equalTo: leadingAnchor),
    layoutStackView.trailingAnchor.constraint(equalTo: trailingAnchor),
    layoutStackView.bottomAnchor.constraint(equalTo: bottomAnchor),
])

고민

중복코드인 myView.translatesAutoresizingMaskIntoConstraints = false 를 줄이기 위해 사용 했습니다. 하지만 사실상 property wrapper 를 사용했을때나, 사용하지 않았을때나 같은 코드 한줄