将 SwiftUI 颜色转换为 UIColor

Jas*_*ara 5 swift swift5 swiftui

我想将 SwiftUI 视图颜色转换为 UIKit UIcolor 组件。我尝试了几种方法,也参考了 StackOverflow 已经给出的答案,但它们没有用。一些用户在这些帖子中也提到了这一点。我已经完成了以下由turingtested提出的代码

但这不起作用。任何建议或帮助都非常感谢。

fileprivate extension Color {
    func uiColor() -> UIColor {
        let components = self.components()
        return UIColor(red: components.r, green: components.g, blue: components.b, alpha: components.a)
    }
    private func components() -> (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) {
        let scanner = Scanner(string: self.description.trimmingCharacters(in: CharacterSet.alphanumerics.inverted))
        var hexNumber: UInt64 = 0
        var r: CGFloat = 0.0, g: CGFloat = 0.0, b: CGFloat = 0.0, a: CGFloat = 0.0
        let result = scanner.scanHexInt64(&hexNumber)
        if result {
            r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
            g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
            b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
            a = CGFloat(hexNumber & 0x000000ff) / 255
        }
    return (r, g, b, a)
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 16

如果您正在寻找最新的答案:

从 iOS 14 开始,UIColor该类有一个初始值设定项,它将 SwiftUI 颜色作为参数:UIColor(Color.red)


Joh*_* M. 8

基本上,Apple 并不打算让你进行这种转换。SwiftUIColor是 a View,框架的设计是数据流向 a View,然后显示。您永远不应该从View.

如果您发现自己需要使用颜色的组成部分,则应该使用UIColor,然后Color在准备显示它时转换为 。

如果您尝试获取诸如 之类的系统颜色的组件Color.red,我相信它们与 Adaptive 相同UIColor.systemRed,后者确实具有可访问的组件。

标准颜色文档