[swift] SwifterSwift를 사용하여 앱의 동적 테마 및 스타일 지원하기

앱의 외관을 다양한 테마와 스타일로 동적으로 변경할 수 있다면 사용자에게 더욱 풍부한 경험을 제공할 수 있습니다. 이번 블로그 포스트에서는 SwifterSwift라는 유용한 Swift 라이브러리를 사용하여 앱의 동적 테마 및 스타일을 지원하는 방법을 알아보겠습니다. SwifterSwift는 다양한 유틸리티 기능을 제공하여 Swift 앱 개발을 훨씬 간편하게 만들어줍니다.

SwifterSwift 라이브러리 설치하기

먼저 SwifterSwift 라이브러리를 설치해야 합니다. Cocoapods를 사용하는 경우, Podfile에 다음 줄을 추가하고 pod install 명령을 실행하여 라이브러리를 설치합니다.

pod 'SwifterSwift', '~> 5.0'

Cocoapods를 사용하지 않는 경우, SwifterSwift의 GitHub 저장소에서 직접 소스 코드를 다운로드하여 프로젝트에 추가합니다.

동적 테마 지원하기

SwifterSwift는 UIColor 클래스에 테마 지원 기능을 추가하는 theme 프로퍼티를 제공합니다. 이를 활용하여 앱에서 사용하는 색상을 동적으로 변경할 수 있습니다. 다음은 사용자가 설정할 수 있는 두 가지 테마 “라이트”와 “다크”를 가지는 예시 코드입니다.

import SwifterSwift

extension UIColor {
    static var themeBackgroundColor: UIColor {
        switch UIColor.theme {
        case .light:
            return UIColor.white
        case .dark:
            return UIColor.black
        }
    }

    static var themeTextColor: UIColor {
        switch UIColor.theme {
        case .light:
            return UIColor.black
        case .dark:
            return UIColor.white
        }
    }
}

위의 코드에서는 UIColor 확장(extension)을 사용하여 themeBackgroundColorthemeTextColor라는 두 개의 새로운 속성을 추가했습니다. UIColor.theme을 사용하여 현재 선택된 테마에 맞는 배경색과 텍스트 색상을 반환합니다.

동적 스타일 지원하기

SwifterSwift의 또 다른 유용한 기능은 동적 스타일을 지원하는 applyStyle(_:toViewsOfType:) 메서드입니다. 이 메서드를 사용하면 특정 유형의 뷰에 동적으로 스타일을 적용할 수 있습니다. 아래는 버튼에 적용할 수 있는 두 가지 스타일 “primary”와 “secondary”를 가지는 예시 코드입니다.

import SwifterSwift

enum ButtonStyle {
    case primary
    case secondary
    
    var titleColor: UIColor {
        switch self {
        case .primary:
            return UIColor.white
        case .secondary:
            return UIColor.themeTextColor
        }
    }
    
    var backgroundColor: UIColor {
        switch self {
        case .primary:
            return UIColor.themeBackgroundColor
        case .secondary:
            return UIColor.clear
        }
    }
    
    func apply(to button: UIButton) {
        button.setTitleColor(titleColor, for: .normal)
        button.backgroundColor = backgroundColor
    }
}

let primaryButton = UIButton()
ButtonStyle.primary.apply(to: primaryButton)

let secondaryButton = UIButton()
ButtonStyle.secondary.apply(to: secondaryButton)

위의 코드에서 ButtonStyle 열거형은 titleColorbackgroundColor 프로퍼티를 가지고 있습니다. 각 스타일에 맞는 색상을 반환하는 computed property입니다. apply(to:) 메서드를 호출하여 버튼에 선택한 스타일을 적용합니다. 이렇게 하면 버튼의 색상과 배경이 동적으로 변경됩니다.

결론

SwifterSwift 라이브러리를 사용하면 동적 테마 및 스타일을 앱에 쉽게 구현할 수 있습니다. UIColor 클래스에 theme 프로퍼티를 추가하여 색상을 동적으로 변경하고, 스타일을 적용하기 위해 applyStyle(_:toViewsOfType:) 메서드를 사용할 수 있습니다. 이를 통해 앱의 외관을 다양한 테마와 스타일로 유연하게 변화시킬 수 있습니다.

참고 자료