-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
연락처 관리 앱 [STEP3] JaeHyeok, Dora #43
base: 2_JaeHyeok
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요. @KSK9820 , @SimJaeHyeok !
Step3를 최대한 진행해보셨네요!
검색 기능과 셀 삭제 기능을 잘 구현해보셨네요🙂
다만 특정 케이스에서 셀 삭제 시 에러가 발생하고 있습니다.
해당 에러를 한번 파악해서 해결해 볼 수 있을까요?
접근제어자 internal
과 public
의 경우,
Swift, Xcode의 프레임워크
, 라이브러리
와 같은 키워드를 알아보면 좋을 것 같습니다!
다른 질문은 궁금증과 함께 코멘트로 남겨보았습니다~
} | ||
private var contacts = [Contact]() | ||
private var filteredContacts: [Contact]? | ||
private var searchText: String? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
지금처럼 searchText
프로퍼티를 검색 텍스트로 사용하는 것도 좋은 방법이라고 생각합니다🙂
@@ -26,24 +26,24 @@ class NewContactViewController: UIViewController { | |||
phoneNumberTextField.delegate = self | |||
} | |||
|
|||
func navigationSetting() { | |||
private func navigationSetting() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
private
키워드를 사용해보셨네요.👍
@@ -59,14 +59,14 @@ extension NewContactViewController { | |||
saveAlert(Contact(name: name, phoneNumber: number, age: age)) | |||
} | |||
|
|||
func cancelAlert() { | |||
private func cancelAlert() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
동사형으로 메서드를 시작해보는 것은 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
func cancelAlert() {} // 수정 전
func showCancelAlert() {} // 수정 후
알럿을 보여주는 메서드이기때문에 말씀하신대로 동사형으로 수정하였습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정한 버전에서 에러가 발생하고 있습니다! 확인해볼 수 있을까요?
@@ -76,28 +76,28 @@ extension NewContactViewController { | |||
present(alert, animated: true) | |||
} | |||
|
|||
func nameCheck() -> String? { | |||
private func nameCheck() -> String? { | |||
guard let name = nameTextField.text else { | |||
return nil | |||
} | |||
return name == "" ? nil : name.components(separatedBy: " ").joined() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
name.isEmpty
로 표현하는 것도 좋은 방법일 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
넵 해당 부분 수정하였습니다!
guard let name = nameTextField.text else { | ||
return nil | ||
} | ||
return name == "" ? nil : name.components(separatedBy: " ").joined() | ||
} | ||
|
||
func ageCheck() -> Int? { | ||
private func ageCheck() -> Int? { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
동사형으로 메서드를 시작해보는 것은 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
func ageCheck() {} // 수정 전
func checkAge() {} // 수정 후
수정하였습니다.
guard let ageText = ageTextField.text, let age = Int(ageText) else { | ||
return nil | ||
} | ||
return age | ||
} | ||
|
||
func numberCheck() -> String? { | ||
private func numberCheck() -> String? { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
동사형으로 메서드를 시작해보는 것은 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
func numberCheck() {} // 수정 전
func checkNumber() {} // 수정 후
수정하였습니다.
addressBook.deleteContact(indexPath.row) | ||
tableView.deleteRows(at: [indexPath], with: .automatic) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
tableView 의 셀과 인덱스 동작 방식과 데이터 모델의 싱크를 잘 맞출 수 있다면,
해당 방법도 문제가 되어가 잘못된 방법이 아니라고 생각이 듭니다.
지금 로직에서 발생한 문제를 파악해보는 것도 좋은 경험이 될 것 같습니다!🙂
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
addressBook.deleteContact(indexPath.row)
defer {
tableView.deleteRows(at: [indexPath], with: .automatic)
}
실제 데이터에서 사라지는 것이 먼저이기 때문에 deleteRows를 defer문 안에 넣어 함수가 종료할 때 즉시 실행되도록 구현하였습니다.
혹시 다른 방법도 있을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 배치 상, 데이터가 삭제되고 테이블뷰의 row가 지워지기 때문에 코드 실행 순서의 문제로는 보이지 않습니다.
연락처를 추가하고 검색 필드에서 검색할 때, 테이블뷰의 데이터가 2배로 늘어가서 보이는 문제가 발생하고 있습니다.
아마 해당 인덱스를 찾는 과정에서 에러가 발생하지 않을까 싶습니다.🙂
고민해보시고 의견 주시면 좋을 것 같습니다~
리뷰어: @zdodev
버드: @KSK9820, @SimJaeHyeok
소대, 안녕하세요! [STEP 3] PR 드립니다🙌🏻
Summary ⛳️
구현 기능 및 상세
고려했던 점 👀
질문 사항
interna
l과public
의 차이를 잘 모르겠습니다.internal
과private
는 접근에 관한 명확한 차이가 있는데,internal
과public
의 명확한 차이를 모르겠습니다.internal
의 경우 하나의 모듈에서 접근이 가능하고, public의 경우는 모듈 외부에서 접근 가능하다고 나와있는데 어느 범위인지 알고 싶습니다.