从 SwiftUI 颜色选择器中获取价值

Get Value from SwiftUI Color Picker

iOS 14 个带有 UIKit 的原生颜色选择器 (UIColorWell), AppKit (NSColorWell) and SwiftUI (ColorPicker)。

虽然颜色井有一个 属性 selectedColor 显示所选的 UIColor/NSColor 值,但 SwiftUI ColorPicker 需要一个 Binding<Color>.但是,我找不到任何有关如何从 Color 值中获取有用信息的信息。

使用 Color.init(_: UIColor) but there does not seem to be a way to get a UIColor from an existing Color or to extract the color components (e.g. the RGB values similar to the UIColor.getRed(_:green:blue:alpha:) 方法从 UIColor 创建 Color 很容易。

如何从 SwiftUI 获取基础颜色值 ColorPicker

在大多数情况下,您可以直接在 SwiftUI 中使用 Color,即不需要从中提取任何内容。

无论如何,如果需要 UIColor SwiftUI 2.0 提供了新的 API

extension UIColor {

    @available(iOS 14.0, tvOS 14.0, watchOS 7.0, *)
    @available(OSX, unavailable)
    public convenience init(_ color: Color)
}
import SwiftUI
extension Color {
    struct Components {
        var r, g, b, a: Double
    }
    
    var components: Components? {
        guard let components = UIColor(self).cgColor.components?.compactMap(Double.init),
              components.count == 4
        else { return nil}
        return Components(r: components[0], g: components[1], b: components[2], a: components[3])
    }
}
// Usage
print(Color.primary.components)