[swift] SwiftyUserDefaults를 사용하여 사용자의 앱 내 테마 설정을 변경하는 방법은 어떻게 되나요?

먼저, SwiftyUserDefaults를 프로젝트에 통합해야 합니다. 프로젝트의 Podfile 파일에 다음 코드를 추가합니다:

pod 'SwiftyUserDefaults'

그런 다음, 터미널에서 pod install 명령을 실행하여 라이브러리를 설치합니다.

이제, 테마 설정을 저장하기 위한 저장소를 만들어야 합니다. UserDefaults의 확장 기능을 사용하여 테마 설정을 저장하는 방법은 다음과 같습니다:

import SwiftyUserDefaults

extension DefaultsKeys {
    static let appTheme = DefaultsKey<String?>("app_theme")
}

enum AppTheme: String {
    case light
    case dark
}

func setTheme(_ theme: AppTheme) {
    Defaults[.appTheme] = theme.rawValue
}

func getTheme() -> AppTheme {
    if let rawValue = Defaults[.appTheme] {
        return AppTheme(rawValue: rawValue) ?? .light
    } else {
        return .light
    }
}

위의 코드에서, DefaultsKeysappTheme라는 키를 정의하고, AppThemelightdark 두 가지 테마를 갖도록 정의했습니다. setTheme 함수는 주어진 테마를 UserDefaults에 저장하고, getTheme 함수는 저장된 테마를 가져와서 반환합니다. 만약 저장된 테마가 없다면 기본 테마로 light를 반환합니다.

이제, 앱의 설정 화면에서 테마를 변경할 수 있도록 코드를 추가합니다. 예를 들어, 버튼을 통해 테마를 변경하는 방법은 다음과 같습니다:

import UIKit

class SettingsViewController: UIViewController {
    @IBOutlet weak var themeButton: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let currentTheme = getTheme()
        themeButton.setTitle("Current theme: \(currentTheme.rawValue)", for: .normal)
    }
    
    @IBAction func changeThemeButtonTapped(_ sender: UIButton) {
        let newTheme: AppTheme = (getTheme() == .light) ? .dark : .light
        setTheme(newTheme)
        
        themeButton.setTitle("Current theme: \(newTheme.rawValue)", for: .normal)
        
        // 테마가 변경되었을 때 필요한 UI 변경 작업을 수행합니다.
        // 예를 들어, 배경색을 변경하는 로직을 추가할 수 있습니다.
        view.backgroundColor = (newTheme == .light) ? .white : .black
    }
}

위의 코드에서, SettingsViewController는 화면에 테마를 변경하는 버튼을 가지고 있습니다. 버튼을 누를 때마다 현재 테마를 가져와서 반전된 테마로 설정하고, 버튼의 텍스트와 배경색도 변경합니다.

이제 SettingsViewController를 앱의 설정 화면으로 사용하여 사용자가 앱 내 테마를 변경할 수 있도록 됩니다.