From 4cdab5b57f5ad23087839730c6ba4c5a5fbb4015 Mon Sep 17 00:00:00 2001 From: jihyeonjjang Date: Wed, 22 Oct 2025 11:18:15 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=84=B1=ED=96=A5=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iCo/Features/MyPage/View/AlarmView.swift | 21 ---------- .../MyPage/View/Main/MyPageMenu.swift | 3 ++ .../MyPage/View/Main/MyPageView.swift | 4 +- .../MyPage/View/UpdateRiskToleranceView.swift | 38 +++++++++++++++++++ .../Onboarding/LastOnboardingPage.swift | 3 -- 5 files changed, 44 insertions(+), 25 deletions(-) delete mode 100644 AIProject/iCo/Features/MyPage/View/AlarmView.swift create mode 100644 AIProject/iCo/Features/MyPage/View/UpdateRiskToleranceView.swift diff --git a/AIProject/iCo/Features/MyPage/View/AlarmView.swift b/AIProject/iCo/Features/MyPage/View/AlarmView.swift deleted file mode 100644 index 4cfccc7a..00000000 --- a/AIProject/iCo/Features/MyPage/View/AlarmView.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// AlarmView.swift -// AIProject -// -// Created by 백현진 on 8/3/25. -// - -import SwiftUI - -struct AlarmView: View { - var body: some View { - VStack { - HeaderView(heading: "알림 설정") - Spacer() - } - } -} - -#Preview { - AlarmView() -} diff --git a/AIProject/iCo/Features/MyPage/View/Main/MyPageMenu.swift b/AIProject/iCo/Features/MyPage/View/Main/MyPageMenu.swift index 47709cc6..e4c974ad 100644 --- a/AIProject/iCo/Features/MyPage/View/Main/MyPageMenu.swift +++ b/AIProject/iCo/Features/MyPage/View/Main/MyPageMenu.swift @@ -9,6 +9,7 @@ import Foundation enum MyPageMenu: String, Hashable, Identifiable { case bookmark + case updateRiskTolerance case themeSet case feedback @@ -17,6 +18,7 @@ enum MyPageMenu: String, Hashable, Identifiable { var title: String { switch self { case .bookmark: return "북마크 관리" + case .updateRiskTolerance: return "투자 성향 변경" case .themeSet: return "테마 변경" case .feedback: return "이메일 문의" } @@ -25,6 +27,7 @@ enum MyPageMenu: String, Hashable, Identifiable { var icon: String { switch self { case .bookmark: return "bookmark" + case .updateRiskTolerance: return "dial.medium" case .themeSet: return "paintpalette" case .feedback: return "at" } diff --git a/AIProject/iCo/Features/MyPage/View/Main/MyPageView.swift b/AIProject/iCo/Features/MyPage/View/Main/MyPageView.swift index 89d9daea..e92fd746 100644 --- a/AIProject/iCo/Features/MyPage/View/Main/MyPageView.swift +++ b/AIProject/iCo/Features/MyPage/View/Main/MyPageView.swift @@ -32,6 +32,8 @@ struct MyPageView: View { switch selection { case .bookmark: BookmarkView(coinStore: coinStore) + case .updateRiskTolerance: + UpdateRiskToleranceView() case .themeSet: ThemeView() case .feedback: @@ -58,7 +60,7 @@ struct MyPageView: View { List(selection: $selection) { VStack { Section { - ForEach([MyPageMenu.bookmark, .themeSet]) { menu in + ForEach([MyPageMenu.bookmark, .updateRiskTolerance, .themeSet]) { menu in MyPageMenuRow(title: menu.title, imageName: menu.icon) .contentShape(.rect) .onTapGesture { diff --git a/AIProject/iCo/Features/MyPage/View/UpdateRiskToleranceView.swift b/AIProject/iCo/Features/MyPage/View/UpdateRiskToleranceView.swift new file mode 100644 index 00000000..b518cc0d --- /dev/null +++ b/AIProject/iCo/Features/MyPage/View/UpdateRiskToleranceView.swift @@ -0,0 +1,38 @@ +// +// UpdateRiskToleranceView.swift +// iCo +// +// Created by 지현 on 10/21/25. +// + +import SwiftUI + +struct UpdateRiskToleranceView: View { + @AppStorage(AppStorageKey.investmentType) private var storedInvestmentType: String = "" + @State private var selectedType: RiskTolerance? + + var body: some View { + ScrollView { + VStack(spacing: 0) { + SubheaderView(subheading: "나의 투자 성향 조정") + .padding(.bottom, 16) + + VStack(spacing: 16) { + ForEach(RiskTolerance.allCases, id: \.self) { type in + RoundedRectangleFillButton(title: type.rawValue, + isHighlighted: Binding(get: { storedInvestmentType == type.rawValue }, set: { _ in })) { + withAnimation(.snappy) { storedInvestmentType = type.rawValue } + } + } + } + .padding(.horizontal, .spacing) + } + } + .interactiveSwipeBackEnabled() + .scrollIndicators(.hidden) + } +} + +#Preview { + UpdateRiskToleranceView() +} diff --git a/AIProject/iCo/Features/Onboarding/LastOnboardingPage.swift b/AIProject/iCo/Features/Onboarding/LastOnboardingPage.swift index 511f4bfe..978f3ac5 100644 --- a/AIProject/iCo/Features/Onboarding/LastOnboardingPage.swift +++ b/AIProject/iCo/Features/Onboarding/LastOnboardingPage.swift @@ -19,8 +19,6 @@ import SwiftUI /// - isLandscape: 가로/세로 레이아웃 여부를 나타내는 바인딩 값 /// - onFinish: 온보딩 완료 시 호출되는 콜백 struct LastOnboardingPage: View { - @EnvironmentObject var recommendCoinViewModel: RecommendCoinViewModel - @AppStorage(AppStorageKey.investmentType) private var storedInvestmentType: String = "" @State private var selectedType: RiskTolerance? @@ -74,5 +72,4 @@ struct LastOnboardingPage: View { #Preview { LastOnboardingPage(isLandscape: .constant(true), onFinish: { }) - .environmentObject(RecommendCoinViewModel()) }