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()) }