클라이언트

[UIKit] UIColor Hex 초기화, 문자열 초기화 유틸 Extension 코드

애기공룡훈련병 2025. 2. 16. 14:01
반응형

Swift에서 UIColor를 초기화할 때, 다양한 16진수 형식의 문자열(0x~~, #~~~, FFFFFF)을 지원하는 유틸리티 확장을 구현해보겠습니다. 또한, 이를 검증하기 위한 테스트 코드도 작성합니다.

import UIKit

extension UIColor {
    convenience init?(hex: String) {
        var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
        hexSanitized = hexSanitized.replacingOccurrences(of: "0x", with: "").replacingOccurrences(of: "#", with: "")

        var rgb: UInt64 = 0
        guard Scanner(string: hexSanitized).scanHexInt64(&rgb) else { return nil }

        let length = hexSanitized.count
        switch length {
        case 6: // RGB (FFFFFF)
            self.init(
                red: CGFloat((rgb >> 16) & 0xFF) / 255.0,
                green: CGFloat((rgb >> 8) & 0xFF) / 255.0,
                blue: CGFloat(rgb & 0xFF) / 255.0,
                alpha: 1.0
            )
        case 8: // ARGB (FFFFFFFF)
            self.init(
                red: CGFloat((rgb >> 16) & 0xFF) / 255.0,
                green: CGFloat((rgb >> 8) & 0xFF) / 255.0,
                blue: CGFloat(rgb & 0xFF) / 255.0,
                alpha: CGFloat((rgb >> 24) & 0xFF) / 255.0
            )
        default:
            return nil
        }
    }
}

 

테스트 코드

이제, XCTest 프레임워크를 사용하여 위의 확장 기능이 정상적으로 작동하는지 확인하는 테스트 코드를 작성합니다.

import XCTest
@testable import YourProject // 프로젝트 명에 맞게 변경하세요.

class UIColorHexTests: XCTestCase {
    func testHexColorInitialization() {
        let color1 = UIColor(hex: "0xFF5733")
        let color2 = UIColor(hex: "#FF5733")
        let color3 = UIColor(hex: "FF5733")
        let color4 = UIColor(hex: "#80FF5733")
        let color5 = UIColor(hex: "80FF5733")
        let invalidColor = UIColor(hex: "XYZ123")

        XCTAssertNotNil(color1, "0xFF5733 should be valid")
        XCTAssertNotNil(color2, "#FF5733 should be valid")
        XCTAssertNotNil(color3, "FF5733 should be valid")
        XCTAssertNotNil(color4, "#80FF5733 should be valid")
        XCTAssertNotNil(color5, "80FF5733 should be valid")
        XCTAssertNil(invalidColor, "XYZ123 should be invalid")
    }
}

 

 

이제 UIColor를 다양한 16진수 형식의 문자열을 사용하여 쉽게 초기화할 수 있습니다.

  • 0xRRGGBB, #RRGGBB, RRGGBB → RGB 값으로 해석
  • #AARRGGBB, AARRGGBB → ARGB 값으로 해석
  • 올바르지 않은 형식이면 nil 반환
반응형