当前位置 : 主页 > 手机开发 > ios >

核心图形 – Xcode 8 Beta 4 CGColor.components不可用

来源:互联网 收集:自由互联 发布时间:2021-06-11
虽然下面的代码以前工作过,但它已停止在 Xcode 8 Beta 4中工作,可能是因为组件返回的是一个非常非 Swift-y的C系列浮点数,并且已被删除.错误是秃头 – “’组件’不可用” – 如果有的话
虽然下面的代码以前工作过,但它已停止在 Xcode 8 Beta 4中工作,可能是因为组件返回的是一个非常非 Swift-y的C系列浮点数,并且已被删除.错误是秃头 – “’组件’不可用” – 如果有的话,我找不到取代它的东西.有谁知道如何产生相同的功能?

public var cgColour: CGColor {
    get {
        return CGColor(red: self.colourRed, green: self.colourGreen, blue: self.colourBlue, alpha: self.colourAlpha)
    }
    set {
        let comps = newValue.components // No longer available
        self.colourRed = (comps?[0])!
        self.colourGreen = (comps?[1])!
        self.colourBlue = (comps?[2])!
        self.colourAlpha = (comps?[3])!
    }
}

更新
@Hamish的答案有效,但我最初的意图是不使用UIColor或NSColor,以便我的代码可以在iOS和&苹果系统.我最终做的是这个……

#if os(iOS)
import UIKit
#elseif os(OSX)
import Cocoa
#endif

extension CGColor {
    var components: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
        var r: CGFloat = 0
        var g: CGFloat = 0
        var b: CGFloat = 0
        var a: CGFloat = 0
        #if os(iOS)
            UIColor(cgColor: self).getRed(&r, green: &g, blue: &b, alpha: &a)
        #elseif os(OSX)
            NSColor(cgColor: self)?.getRed(&r, green: &g, blue: &b, alpha: &a)
        #endif
        return (r, g, b, a)
    }
}
// Playground code to test...
#if os(iOS)
let rgba = UIColor.brown.cgColor.components //(0.6, 0.4, 0.2, 1.0)
#elseif os(OSX)
let rgba = NSColor.brown.cgColor.components //(0.6, 0.4, 0.2, 1.0)
#endif

……这是一个很好的例子 – 有没有人得到更好的答案?

这似乎是一个过渡性的beta问题.

Github上的Swift repo包含一个extensive SDK overlay for CoreGraphics,包括一个新版本的CGColor.components,其返回类型是Swift数组而不是UnsafePointer.它们如何使SDK覆盖工作的部分工作是API notes,它将一些底层C调用映射到双下划线的Swift方法,以便覆盖可以将它们包装在更Swifty接口中.

看起来beta 4和beta 5编译器选择了API注释更改,但不包括包含新版本组件的覆盖.据推测,未来的测试版(或最终的Swift 3.0 / Xcode 8.0版本)将包含现在github上的所有内容.

网友评论