Firebase에 메모지설정을 저장하기 앞서,
열거형으로 ThemeType 을 먼저 케이스를 정의해주었어요.
// ThemeManager.swift
enum ThemeType: String, CaseIterable {
case system = "System"
case light = "Light"
case dark = "Dark"
case atom = "Atom"
// 각 테마 유형별로 속성 정의
var isSelected: Bool {
// 여기서 현재 선택된 테마와 비교하여 반환할 수 있음
return false
}
var isPremium: Bool {
// 테마별 프리미엄 여부 설정
switch self {
case .system:
return false
case .light:
return false
case .dark:
return false
case .atom:
return true
}
}
var textColor: Color {
// 테마별 텍스트 색상 설정
switch self {
case .system:
return Color.textColor // 기본 색상이나 시스템 색상 사용
case .light:
return Color.black
case .dark:
return Color.white
case .atom:
return Color.atomTextColor
}
}
var bgColor: Color {
// 테마별 배경 색상 설정
switch self {
case .system:
return Color.bgColor // 기본 색상이나 시스템 색상 사용
case .light:
return Color.white
case .dark:
return Color.black
case .atom:
return Color.atomBgColor
}
}
// 필요에 따라 더 많은 속성이나 메소드를 추가할 수 있음
}
2. ThemeManager를 통해 메모지 변경
현재 코드는 기기에서만 메모지를 변경하기 위해 UserDefault에 저장하는 방식으로 작성되었기 떄문에,
해당 부분은 많이 변경될 예정입니다.
final class ThemeManager: ObservableObject {
static let shared = ThemeManager()
@Published var userThemePreference: ThemeType?
var themeList = ThemeType.allCases
init(){
self.userThemePreference = loadThemePreference()
}
func saveThemePreference(themeType: ThemeType) {
UserDefaults.standard.set(themeType.rawValue, forKey: "selectedThemeType")
}
func loadThemePreference() -> ThemeType {
guard let themeTypeString = UserDefaults.standard.string(forKey: "selectedThemeType"),
let themeType = ThemeType(rawValue: themeTypeString) else {
return .system
}
return themeType
}
var themePreference: ThemeType {
get {
guard let themeTypeString = UserDefaults.standard.string(forKey: "selectedThemeType"),
let themeType = ThemeType(rawValue: themeTypeString) else {
return .system // 기본값으로 Regular 반환
}
return themeType
}
set {
UserDefaults.standard.set(newValue.rawValue, forKey: "selectedThemeType")
// userFontPreference도 함께 업데이트하여 @Published를 통해 변경 사항을 반영합니다.
DispatchQueue.main.async {
self.userThemePreference = newValue
}
}
}
func changeTheme(to selectedTheme:ThemeType) {
saveThemePreference(themeType: selectedTheme)
userThemePreference = selectedTheme
}
func isThemeSelected(_ theme: ThemeType) -> Bool {
return userThemePreference == theme
}
}
PR 가이드라인
PR Checklist
PR Type
어떤 종류의 PR인가요?
연관되는 issue 정보를 알려주세요
Issue Number: #225
PR 설명하기
1. 열거형으로 ThemeType 정의
Firebase에 메모지설정을 저장하기 앞서, 열거형으로
ThemeType
을 먼저 케이스를 정의해주었어요.2. ThemeManager를 통해 메모지 변경
현재 코드는 기기에서만 메모지를 변경하기 위해 UserDefault에 저장하는 방식으로 작성되었기 떄문에, 해당 부분은 많이 변경될 예정입니다.
가능하다면 추가해주세요
변경 사항 스크린샷 혹은 화면 녹화
https://github.com/APP-iOS3rd/PJ3T2_Mymory/assets/75136643/a794d3fc-349c-4f81-8189-4e5e20d06923
https://github.com/APP-iOS3rd/PJ3T2_Mymory/assets/75136643/782edd04-08fd-4cd2-a7bd-6145f597eb5f
기타 언급해야 할 사항들
Memo.swift
에 메모지 테마 항목추가,, 다시 struct 구조체로 바꿔야할듯...