我想在Swift中获得UIColor的RGB值:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
println("RGB Value is:");
println(swiftColor.getRGB()); <<<<<< How to do that ?

在Java中,我将按如下方式进行:

Color cnew = new Color();
int iColor = cnew.rgb(1, 165/255, 0);
System.out.println(iColor);

我应该如何得到这个值?

推荐答案

Java getRGB()

UIColor没有这样的方法,但您可以定义自己的方法:

extension UIColor {

    func rgb() -> Int? {
        var fRed : CGFloat = 0
        var fGreen : CGFloat = 0
        var fBlue : CGFloat = 0
        var fAlpha: CGFloat = 0
        if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) {
            let iRed = Int(fRed * 255.0)
            let iGreen = Int(fGreen * 255.0)
            let iBlue = Int(fBlue * 255.0)
            let iAlpha = Int(fAlpha * 255.0)

            //  (Bits 24-31 are alpha, 16-23 are red, 8-15 are green, 0-7 are blue).
            let rgb = (iAlpha << 24) + (iRed << 16) + (iGreen << 8) + iBlue
            return rgb
        } else {
            // Could not extract RGBA components:
            return nil
        }
    }
}

用法:

let swiftColor = UIColor(red: 1, green: 165/255, blue: 0, alpha: 1)
if let rgb = swiftColor.rgb() {
    print(rgb)
} else {
    print("conversion failed")
}

请注意,仅当UIColor已在

Remark:正如@vonox7所注意到的,返回值可以是负值

反向转换是

extension UIColor {
    convenience init(rgb: Int) {
        let iBlue = rgb & 0xFF
        let iGreen =  (rgb >> 8) & 0xFF
        let iRed =  (rgb >> 16) & 0xFF
        let iAlpha =  (rgb >> 24) & 0xFF
        self.init(red: CGFloat(iRed)/255, green: CGFloat(iGreen)/255,
                  blue: CGFloat(iBlue)/255, alpha: CGFloat(iAlpha)/255)
    }
}

Swift相关问答推荐

DynamicView Content的修改视图?

启用完成并发判断以及如何解决警告(续)

变量捕获:变量在函数闭包中的行为

同时具有每个文本的标识符的文本组的可扩展性标识符

ConfirmationDialog取消swiftui中的错误

如何让飞机与 RealityKit 中的物体相撞

SwiftUI 从任务中安全更新状态变量

UIButton 配置不更新按钮标题

如何在 SwiftUI 中获取视图的位置

令人满意的 var body:协议扩展中的一些视图

如何从 LLDB 调用带有断点的 Swift 函数?

在 Swift 中将两个字节的 UInt8 数组转换为 UInt16

无法使用锚激活约束

Swift 2 中的新 @convention(c):我该如何使用它?

使用 Swift 在 iOS 8 中为应用程序图标添加徽章

Swift - 导入我的 swift 类

无法停止 AVPlayer

如何交换快速数组中的元素?

iOS 视图可见性消失了

iOS:如何检测用户是否订阅了自动更新订阅