[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
}
}
위의 코드에서, DefaultsKeys
에 appTheme
라는 키를 정의하고, AppTheme
는 light
와 dark
두 가지 테마를 갖도록 정의했습니다. 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
를 앱의 설정 화면으로 사용하여 사용자가 앱 내 테마를 변경할 수 있도록 됩니다.