-
Notifications
You must be signed in to change notification settings - Fork 0
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
[WEAV-78] 나이 입력 뷰 구현 #24
Conversation
Walkthrough이 변경 사항은 사용자 인증 프로세스의 일부로 새로운 Changes
Possibly related PRs
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Actionable comments posted: 4
🧹 Outside diff range and nitpick comments (10)
Projects/App/Sources/Navigation/NavigationStack.swift (1)
35-36
: 변경 사항이 적절히 구현되었습니다.새로운
.authProfileAge
케이스가signUp
하위 뷰 스위치에 올바르게 추가되었습니다. 이는 PR 목표인 나이 입력 뷰 구현과 일치합니다.코드의 가독성을 높이기 위해 새로운 케이스에 대한 간단한 설명을 주석으로 추가하는 것이 좋겠습니다. 예를 들어:
case .authProfileAge: // 사용자의 나이를 입력받는 뷰 AuthProfileAgeInputView()Projects/Core/CommonKit/Sources/Path/PathTypes.swift (2)
36-36
: LGTM! 새로운 케이스가 잘 추가되었습니다.나이 입력 뷰에 대한 새로운 케이스가 적절히 추가되었습니다. 코드의 일관성과 가독성이 유지되고 있습니다.
다만, 향후 유지보수를 위해 각 케이스에 대한 간단한 주석을 추가하는 것이 좋을 것 같습니다. 예를 들어:
case .authProfileAge: return "나이 입력" // 사용자의 나이를 입력받는 화면
49-49
: 새로운 케이스가 잘 추가되었습니다.
SignUpSubViewType
열거형에authProfileAge
케이스가 적절히 추가되었습니다. 이는PathType
열거형의 변경사항과 일치하며, 기존 명명 규칙을 따르고 있습니다.향후 확장성을 고려하여, 열거형에 관련 케이스들을 그룹화하는 것을 고려해 보시는 것은 어떨까요? 예를 들어:
public enum SignUpSubViewType: Hashable { // 인증 관련 case authPhoneInput case authPhoneVerify case authAgreement case authGreeting // 프로필 관련 case authProfileGender case authProfileAge // 향후 추가될 수 있는 프로필 관련 케이스들... }이렇게 구성하면 향후 새로운 프로필 관련 단계가 추가될 때 코드의 구조를 더 쉽게 파악할 수 있을 것 같습니다.
Projects/Features/SignUp/Sources/ProfileInput/AuthGreeting/AuthGreetingView.swift (1)
Line range hint
47-52
: 지연 및 애니메이션 로직이 개선되었습니다.태스크와 애니메이션을 사용하여 뷰 요소의 등장 타이밍을 제어하는 방식은 좋습니다. 하지만 몇 가지 개선할 점이 있습니다:
- UI 타이밍을 위해
Task.sleep
을 사용하는 것은 권장되지 않습니다. 대신DispatchQueue.main.asyncAfter
를 사용하는 것이 더 적절할 수 있습니다.Task.sleep
의 오류를 무시하고 있습니다. 적절한 오류 처리를 추가하는 것이 좋습니다.다음과 같이 코드를 수정해 보세요:
.onAppear { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { withAnimation(.easeInOut(duration: 0.6)) { isAppeared = true } } }Projects/Features/SignUp/Sources/ProfileInput/AuthProfileGenderInput/AuthProfileGenderInputView.swift (2)
73-75
: 네비게이션 구현이 잘 되었습니다.변경사항이 PR의 목표와 잘 일치합니다.
AppCoordinator
를 사용하여 다음 단계로 네비게이션하는 것이 적절합니다.가독성을 높이기 위해 다음과 같이 작은 개선을 제안합니다:
CTABottomButton( title: "다음", isActive: selectedGender != nil ) { - AppCoordinator.shared.push( - .signUp(.authProfileAge) - ) + AppCoordinator.shared.push(.signUp(.authProfileAge)) }이렇게 하면 코드가 더 간결해지고 한 눈에 파악하기 쉬워집니다.
Line range hint
1-89
: 접근성 개선 제안현재 구현은 잘 되어 있지만, 접근성 측면에서 개선할 수 있는 부분이 있습니다.
다음과 같은 접근성 개선을 고려해 보시기 바랍니다:
- 성별 선택 버튼에
accessibilityLabel
을 추가하여 스크린 리더 사용자가 각 옵션을 명확히 이해할 수 있도록 합니다.accessibilityHint
를 사용하여 사용자에게 선택 방법에 대한 추가 정보를 제공합니다.예시 코드:
type.unselectedImage .resizable() .frame(width: 130, height: 130) .accessibilityLabel(type == .male ? "남성" : "여성") .accessibilityHint("선택하려면 두 번 탭하세요") .onTapGesture { withAnimation { selectedGender = type } }이러한 변경사항은 앱의 전반적인 접근성을 향상시키고 모든 사용자에게 더 나은 경험을 제공할 것입니다.
Projects/Features/SignUp/Sources/AuthPhoneVerify/AuthPhoneVerifyView.swift (4)
87-92
: 커스터마이징을 위한 속성 추가 승인새로운 속성들의 추가로
VerifyCodeInputView
의 재사용성과 유연성이 크게 향상되었습니다. 이는 좋은 개선사항입니다.가독성을 더욱 높이기 위해, 이러한 스타일 관련 속성들을 별도의 구조체로 그룹화하는 것을 고려해 보시는 것은 어떨까요? 예를 들어:
struct VerifyCodeInputStyle { let boxHeight: CGFloat let textColor: Color let borderWidth: CGFloat let borderColor: Color let backColor: Color let cornerRadius: CGFloat }이렇게 하면 향후 스타일 관련 속성을 추가하거나 수정할 때 더욱 관리하기 쉬워질 것입니다.
98-103
: 초기화 메서드 업데이트 승인새로운 매개변수들이 잘 추가되었고, 기본값 설정으로 이전 버전과의 호환성도 유지되었습니다. 매개변수의 순서도 논리적으로 잘 구성되어 있습니다.
각 매개변수에 대한 간단한 문서 주석을 추가하면 사용자가 각 매개변수의 목적을 더 쉽게 이해할 수 있을 것 같습니다. 예를 들어:
/// - Parameter boxHeight: 각 입력 상자의 높이 /// - Parameter textColor: 입력된 텍스트의 색상 // ... 나머지 매개변수에 대해서도 비슷하게 추가
130-130
: 텍스트 상자 스타일링 개선 승인새로운 커스터마이징 속성들을 활용하여
getSingleTextBox
메서드가 잘 업데이트되었습니다. 그림자 효과의 추가로 시각적 매력도 향상되었습니다.접근성을 더욱 개선하기 위해, 동적 타입 지원을 고려해 보는 것은 어떨까요? 예를 들어:
Text(text) .font(.system(size: 32, weight: .semibold, design: .default)) .minimumScaleFactor(0.5) .foregroundStyle(textColor)이렇게 하면 사용자의 기기 설정에 따라 텍스트 크기가 자동으로 조절되어 더 나은 사용자 경험을 제공할 수 있습니다.
Also applies to: 138-143, 146-146, 148-148
Line range hint
161-163
: 텍스트 필드 초기화 기능 개선 승인사용자가 쉽게 입력을 지우고 다시 포커스를 얻을 수 있도록 하는 이 변경사항은 사용자 경험을 크게 향상시킵니다.
오류 처리를 개선하기 위해, 입력값의 유효성을 검사하는 로직을 추가하는 것을 고려해 보세요. 예를 들어:
.onChange(of: verifyCode) { oldValue, newValue in if newValue.count > verifyCodeMaxCount { verifyCode = String(newValue.prefix(verifyCodeMaxCount)) } if newValue.count == verifyCodeMaxCount { isTextFieldFocused = false validateInput() // 입력값 검증 함수 호출 } } func validateInput() { // 여기에 입력값 검증 로직 추가 // 예: 모든 문자가 숫자인지 확인 if !verifyCode.allSatisfy({ $0.isNumber }) { errorMessage = "숫자만 입력해주세요." } else { errorMessage = nil } }이렇게 하면 사용자 입력의 정확성을 보장하고 오류를 즉시 피드백할 수 있습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (3)
Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/icon-information.imageset/icon-information.png
is excluded by!**/*.png
Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/icon-information.imageset/[email protected]
is excluded by!**/*.png
Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/icon-information.imageset/[email protected]
is excluded by!**/*.png
📒 Files selected for processing (9)
- Projects/App/Sources/Navigation/NavigationStack.swift (1 hunks)
- Projects/Core/CommonKit/Sources/AppCoordinator.swift (1 hunks)
- Projects/Core/CommonKit/Sources/Path/PathTypes.swift (2 hunks)
- Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/icon-information.imageset/Contents.json (1 hunks)
- Projects/Features/SignUp/Sources/AuthAgreement/AuthAgreementView.swift (1 hunks)
- Projects/Features/SignUp/Sources/AuthPhoneVerify/AuthPhoneVerifyView.swift (2 hunks)
- Projects/Features/SignUp/Sources/ProfileInput/AuthGreeting/AuthGreetingView.swift (1 hunks)
- Projects/Features/SignUp/Sources/ProfileInput/AuthProfileAge/AuthProfileAgeInputView.swift (1 hunks)
- Projects/Features/SignUp/Sources/ProfileInput/AuthProfileGenderInput/AuthProfileGenderInputView.swift (1 hunks)
🔇 Additional comments (12)
Projects/DesignSystem/DesignCore/Resources/Images/Images.xcassets/icon-information.imageset/Contents.json (5)
1-23
: JSON 구조가 올바르게 구성되었습니다.JSON 파일의 구조와 내용이 Xcode 에셋 카탈로그의 예상 형식을 정확히 따르고 있습니다. "images" 배열과 "info" 객체가 적절히 포함되어 있습니다.
4-4
: 이미지 파일 명명 규칙이 적절합니다.이미지 파일들의 이름이 iOS의 표준 관행을 따르고 있습니다. 각각의 스케일 팩터(@1x, @2x, @3x)에 대해 올바르게 명명되었습니다.
Also applies to: 9-9, 14-14
3-18
: 에셋 세트가 완전합니다.1x, 2x, 3x 스케일에 대한 이미지가 모두 포함되어 있으며, 모든 이미지가 "universal" idiom으로 설정되어 있습니다. 이는 모든 필요한 스케일 팩터를 포함하고 있어 다양한 기기에서 사용할 수 있음을 의미합니다.
19-22
: 메타데이터 정보가 적절합니다."info" 객체에 명시된 메타데이터 정보가 Xcode에서 생성된 에셋 카탈로그의 표준을 따르고 있습니다. 작성자가 "xcode"로 지정되어 있고, 버전이 1로 설정되어 있습니다.
1-23
: 전반적으로 파일이 잘 구성되어 있습니다.이 JSON 파일은 "icon-information" 에셋에 대해 올바르게 구조화되어 있으며, 필요한 모든 정보를 포함하고 있습니다. 이미지 파일의 명명 규칙, 에셋 세트의 완전성, 그리고 메타데이터 정보가 모두 iOS 개발 표준을 준수하고 있습니다. 이 에셋은 다양한 기기와 해상도에서 적절히 사용될 수 있을 것으로 보입니다.
Projects/Features/SignUp/Sources/AuthAgreement/AuthAgreementView.swift (2)
Line range hint
1-47
: PR 목표와 파일 내용 간의 불일치이 파일(
AuthAgreementView.swift
)의 내용이 PR 목표에서 언급된 "나이 입력 뷰 구현"과 직접적으로 연관되어 있지 않아 보입니다.
- 이 변경사항이 어떻게 나이 입력 뷰 구현과 관련되는지 명확하지 않습니다.
- VerifyInputView 컴포넌트의 개선 사항도 이 파일에서 직접적으로 확인되지 않습니다.
다음 스크립트를 실행하여 나이 입력 뷰와 관련된 파일을 찾아보세요:
이 결과를 바탕으로 PR의 주요 변경사항이 포함된 파일들을 확인하고, 필요하다면 추가 리뷰를 요청해 주세요.
31-33
: 내비게이션 로직 변경에 대한 검토가 필요합니다.네비게이션 방식이
push
에서changeRootView
로 변경되었습니다. 이는 사용자의 네비게이션 경험에 영향을 줄 수 있습니다.
- 이 변경으로 인해 사용자가 이전 화면으로 돌아갈 수 있는 방법이 영향을 받을 수 있습니다.
- 전체 앱의 네비게이션 흐름과 일관성이 있는지 확인이 필요합니다.
다음 스크립트를 실행하여
AppCoordinator
의 사용 패턴을 확인해 주세요:이 결과를 바탕으로 네비게이션 로직의 일관성을 검토해 주세요.
Projects/Core/CommonKit/Sources/Path/PathTypes.swift (1)
Line range hint
1-49
: 전반적인 변경사항이 PR 목표와 잘 일치합니다.이 PR에서 구현한 나이 입력 뷰에 대한 변경사항이
PathTypes.swift
파일에 잘 반영되었습니다.PathType
과SignUpSubViewType
열거형에 새로운 케이스를 추가한 것은 적절하며, 코드의 일관성과 가독성을 유지하고 있습니다.다만, 향후 개선사항으로 다음을 고려해 보시기 바랍니다:
- 각 케이스에 대한 간단한 주석 추가
SignUpSubViewType
열거형 내 케이스들의 그룹화또한, PR 목표에서 언급된 향후 개선사항인 나이 유효성 검사 및 테스트 케이스 개발을 잊지 마시기 바랍니다.
나이 유효성 검사 로직이 구현되었는지 확인하기 위해 다음 스크립트를 실행해 주세요:
이 스크립트의 결과를 바탕으로 나이 유효성 검사 및 테스트 케이스 개발 상태를 확인할 수 있습니다.
Projects/Features/SignUp/Sources/ProfileInput/AuthGreeting/AuthGreetingView.swift (1)
40-43
: 네비게이션 설정이 추가되었습니다.네비게이션 설정이 성공적으로 추가되었습니다. 그러나 뒤로 가기 버튼을 숨기는 것이 사용자 경험에 미치는 영향을 고려해 보시기 바랍니다.
다음 스크립트를 실행하여 다른 뷰에서도 유사한 네비게이션 설정이 사용되고 있는지 확인해 주세요:
✅ Verification successful
네비게이션 설정 검증 완료
다른 뷰에서도 유사한 네비게이션 설정이 사용되고 있음을 확인했습니다. 따라서, 뒤로 가기 버튼을 숨기는 설정이 일관되게 적용되고 있습니다.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # 설명: 다른 SwiftUI 뷰에서 유사한 네비게이션 설정을 사용하고 있는지 확인합니다. # 테스트: .setNavigation 메서드 사용을 검색합니다. 예상 결과: 유사한 설정을 사용하는 다른 뷰들의 목록. rg --type swift -g '*.swift' -A 3 '\.setNavigation'Length of output: 2546
Projects/Features/SignUp/Sources/ProfileInput/AuthProfileAge/AuthProfileAgeInputView.swift (2)
1-12
: LGTM: 파일 헤더와 import 문이 적절합니다.파일 헤더 정보와 import 문이 SwiftUI 뷰 구현에 적합하게 작성되었습니다.
92-96
: LGTM: 프리뷰 설정이 적절합니다.
NavigationView
내에서AuthProfileAgeInputView
를 미리 볼 수 있도록 올바르게 설정되었습니다.Projects/Features/SignUp/Sources/AuthPhoneVerify/AuthPhoneVerifyView.swift (1)
Line range hint
1-174
: 전체 리뷰 요약이 PR은
VerifyCodeInputView
의 커스터마이징 옵션을 크게 개선하고 사용자 경험을 향상시켰습니다. 주요 변경 사항들:
- 커스터마이징을 위한 새로운 속성 추가
- 초기화 메서드 업데이트로 유연성 증가
- 텍스트 상자 스타일링 개선
- 텍스트 필드 초기화 기능 개선
이러한 변경사항들은 PR의 목표를 잘 달성하고 있습니다. 몇 가지 minor한 개선 사항을 제안했지만, 전반적으로 코드 품질이 우수합니다.
향후 개선을 위한 제안:
- 스타일 관련 속성을 별도의 구조체로 그룹화
- 매개변수에 대한 문서 주석 추가
- 동적 타입 지원 고려
- 입력값 유효성 검사 로직 추가
이러한 제안사항들을 고려하여 추가 개선을 진행하면 좋을 것 같습니다.
public struct AuthProfileAgeInputView: View { | ||
|
||
@State var birthYear = String() | ||
@State var errorMessage: String? = "잘못 입력하셨어요" | ||
@FocusState var isFocused | ||
|
||
public init() {} | ||
|
||
var targetGender: String { | ||
let tempTarget = "여성" | ||
return tempTarget | ||
} |
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.
🛠️ Refactor suggestion
targetGender
속성의 하드코딩된 값 개선 필요
targetGender
속성이 "여성"으로 하드코딩되어 있습니다. 이는 향후 더 동적인 방식으로 처리되어야 할 수 있습니다.
다음과 같이 targetGender
를 매개변수로 받는 것을 고려해보세요:
public struct AuthProfileAgeInputView: View {
let targetGender: String
public init(targetGender: String) {
self.targetGender = targetGender
}
// ... 나머지 코드
}
구현사항
앞으로 개선 사항
스크린샷(선택)
Summary by CodeRabbit
릴리스 노트
신규 기능
AuthProfileAgeInputView
추가.AuthGreetingView
에서 인사 메시지와 버튼의 지연된 애니메이션 추가.VerifyCodeInputView
의 사용자 정의 가능성 향상.버그 수정
AuthPhoneVerifyView
의 텍스트 박스 레이아웃 조정 및 입력 필드 클리어 기능 개선.자산 추가
icon-information
추가.