# 일기장[STEP1] PR --- ## 첫 번째 코멘트 ![](https://hackmd.io/_uploads/HJXG-Gm03.png) ### 🙋‍♂️ 첫 번째 코멘트 답변 - 네 알겠습니다, 다음 PR에 수정하겠습니다 감사합니다 😆 --- ## 두 번째 코멘트 ![](https://hackmd.io/_uploads/ByNSZGXCh.png) ### 🙋‍♂️ 두 번째 코멘트 답변 - 첫 번째 이유는 저희 둘 만의 코드 컨벤션을 정했습니다. 🙌 - 두 번째 이유는 추후에 옵션을 추가할 일을 대비하여 클로저로 생성하였습니다. 🙌 --- ## 세 번째 코멘트 ![](https://hackmd.io/_uploads/HJqjZz7Rn.png) ![](https://hackmd.io/_uploads/BJRnWzmA2.png) ### 🙋‍♂️ 세 번째 코멘트 답변 - 감사합니다. 조금 더 깔끔하고 좋은 코드를 만들기 위해 신경쓰겠습니다. 코드는 수정하도록 하겠습니다. 😀 --- ## 네 번째 코멘트 ![](https://hackmd.io/_uploads/HyOJzMm02.png) ### 🙋‍♂️ 네 번째 코멘트 답변 - `becomeFirstResponser()`는 `textView` 객체를 해당 `window`의 첫 번째 응답자(`first responder`)로 만들도록 `UIKit`에 요청하는 역할을 합니다. - 객체가 첫 번째 응답자가 되기를 원할 때 이 메서드를 호출합니다. - 응답자가 `UITextField`, `UITextView` 또는 `UIKeyInput` 프로토콜을 구현하는 텍스트 뷰인 경우 뷰의 `root window`가 `key window`인 경우에만 소프트웨어 키보드가 표시될 것으로 예상합니다. > key window란?</br> > 키보드 및 기타 비터치 관련(non-touch-related) 이벤트를 수신합니다. 한 번에 하나의 window만 key window가 될 수 있습니다. - [🍎 becomeFirstResponder()](https://developer.apple.com/documentation/uikit/uiresponder/1621113-becomefirstresponder) - [🍎 keyWindow](https://developer.apple.com/documentation/uikit/uiwindow/1621612-keywindow) - [🍎 UIWindow](https://developer.apple.com/documentation/uikit/uiwindow) --- ## 다섯 번째 코멘트 ![](https://hackmd.io/_uploads/SyYKMMXA3.png) ### 🙋‍♂️ 다섯 번째 코멘트 답변 - 첫 번째 이유는 저희 둘 만의 코드 컨벤션을 정했습니다. 🙌 - 두 번째 이유는 추후에 옵션을 추가할 일을 대비하여 클로저로 생성하였습니다. 🙌 --- ## 여섯 번째 코멘트 ![](https://hackmd.io/_uploads/BkP2GfmC2.png) ### 🙋‍♂️ 여섯 번째 코멘트 답변 - 다음과 같은 방법을 사용하려 합니다 :) ```swift! extension Array { subscript(safe index: Int) -> Element? { return indices ~= index ? self[index] : nil } } let list = [1,2,3] list[safe: 4] // nil list[safe: 2] // 3 ``` --- ## 일곱 번째 코멘트 ![](https://hackmd.io/_uploads/Bku0fzXR3.png) ### 🙋‍♂️ 일곱 번째 코멘트 답변 - 따봉으로 답변 --- ## 여덟 번째 코멘트 ![](https://hackmd.io/_uploads/S1hg7Mm02.png) ### 🙋‍♂️ 여덟 번째 코멘트 답변 - 저희가 정한 컨밴션은 `return`을 한 줄 개행하기로 약속했습니다. 그로 인하여 68번째 줄을 개행하였습니다. --- ## 아홉 번째 코멘트 ![](https://hackmd.io/_uploads/SkKr7G7C2.png) ### 🙋‍♂️ 아홉 번째 코멘트 답변 - 아래와 같이 분기 처리를 하여 15.0 버전 이상 인 경우와 미만인 경우 버전 대응을 위한 분기를 구현해보도록 하겠습니다. ```swift! if #available(iOS 15, *) { // [iOS 15.0 버전 이상 인 경우 분기 처리 내용] } else { // [iOS 15.0 버전 미만 인 경우 분기 처리 내용] } ``` --- ## 열 번째 코멘트 ![](https://hackmd.io/_uploads/B1r5QzmC3.png) ### 🙋‍♂️ 열 번째 코멘트 답변 - `NSCoding` 프로토콜이 `init?(coder:)`를 명세하고 있기 때문에 구현해야 합니다. - `DiaryTableViewCell`에서 새로운 `init`을 만들지 않을 경우 상속받은 `UITableViewCell`에 이미 구현되어 있어 구현할 필요가 없습니다. 하지만 `init`을 오버라이드했기 때문에 `required init?`을 구현해야 합니다. - [🍎 Required Initializers](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/initialization/#Required-Initializers) --- ## 열한 번째 코멘트 ![](https://hackmd.io/_uploads/BJLJEzm02.png) ### 🙋‍♂️ 열한 번째 코멘트 답변 - 저희가 알아본 결과 `IDEWorkspacechecks.plist` 파일은 작업 중인 Xcode workspace와 관련된 버전 확인 및 다른 일반적인 체크를 저장한다고 합니다. - 이 파일의 주요 목적으로는 여러 버전의 `Xcode`를 사용하여 프로젝트나 워크스페이스를 공유할 때 발생할 수 있는 문제를 방지하기 위함입니다. - 예를 들어, Kobe가 최신 버전의 `Xcode`에서 작업을하고 Moon이 이전 버전의 `Xcode`에서 작업을 하는 경우 발생할 수 있는 문제점을 알려줄 수 있습니다. **✅ 따라서 이 파일을 git에 포함시키는 것이 좋다는 것이 저희의 의견입니다. 이를 통해 저희 둘이 동일한 경고나 메시지를 볼 수 있기 때문입니다.** - 또한 이 파일의 내용은 `Xcode`가 자동으로 관리하기 때문에 저희가 수정할 필요도 없어서 git에 포함하는 것이 좋다고 생각합니다. **혹시 이 부분에 대하여 다른 조언해주실 부분이 있으시다면 조언 부탁드리겠습니다 🙏** --- ## 열두 번째 코멘트 ![](https://hackmd.io/_uploads/Bk9W4GmR3.png) ### 🙋‍♂️ 열두 번째 코멘트 답변 - IdentifierGenerator를 채택하는 타입이 UITableViewCell일 때만 사용할 수 있도록 제한했습니다. --- ## 열세 번째 코멘트 ![](https://hackmd.io/_uploads/H1amNfQC2.png) ### 🙋‍♂️ 열두 번째 코멘트 답변 - 감사합니다 따봉 --- ## 열네 번째 코멘트 ![](https://hackmd.io/_uploads/S1XPNfmCh.png) ### 🙋‍♂️ 열네 번째 코멘트 답변 - 쌍따봉 ---