How to get RGB components from Color SwiftUI

后端 未结 5 937
旧时难觅i
旧时难觅i 2020-12-15 06:07

If I have a SwiftUI Color:

let col: Color = Color(red: 0.5, green: 0.5, blue: 0.5)

How do I get the RGB components from

5条回答
  •  Happy的楠姐
    2020-12-15 06:29

    iOS 14 / macOS 10.16

    There is a new initializer that takes a Color and returns a UIColor for iOS or NSColor for macOS now. With the help of those you can implement the following extensions:

    iOS / macOS

    import SwiftUI
    
    #if canImport(UIKit)
    import UIKit
    #elseif canImport(AppKit)
    import AppKit
    #endif
    
    extension Color {
        var components: (red: CGFloat, green: CGFloat, blue: CGFloat, opacity: CGFloat) {
    
            #if canImport(UIKit)
            typealias NativeColor = UIColor
            #elseif canImport(AppKit)
            typealias NativeColor = NSColor
            #endif
    
            var r: CGFloat = 0
            var g: CGFloat = 0
            var b: CGFloat = 0
            var o: CGFloat = 0
    
            guard NativeColor(self).getRed(&r, green: &g, blue: &b, alpha: &o) else {
                // You can handle the failure here as you want
                return (0, 0, 0, 0)
            }
    
            return (r, g, b, o)
        }
    }
    

    Usage

    Color.red.components.red // 0.9999999403953552 // <- SwiftUI Colors are not pure!
    

提交回复
热议问题