如何输入检查 CGColor / CGPath?

问题描述 投票:0回答:1

所以看来存在一个与 CoreFoundation 类型相关的 已提交的 swift 错误。根据描述,似乎没有对 CGPath 和 CGColor 进行类型检查,下面是演示该行为的错误片段。

func check(a: AnyObject) -> Bool { return a is CGColor } check("hey") --> true check(1.0) --> true check(UIColor.redColor()) --> true

这就是我正在尝试做的

if let value = self.valueForKeyPath(keyPath) { if let currentValue = value as? CGColor { // Do Something with CGColor } else if let currentValue = value as? CGSize { // Do Something with CGSize } else if let currentValue = value as? CGPoint { // Do Something with CGPoint } }

我已经完成了以下操作,首先对我知道的类型进行类型检查,然后标记 AnyObject 的最后一个语句,并检查 CFTypeID。目前这有效,但

Apple 文档 表示 CFTypeID 可以更改,因此不应依赖。

if let currentValue = value as? CGPoint { // Do Something with CGPoint } else if let currentValue = value as? CGSize { // Do Something with CGSize } else if let currentValue = value as? AnyObject { if CFGetTypeID(currentValue) == 269 { // Cast and do Something with CGColor methodCall((currentValue as! CGColor)) } }

有人找到解决此问题的可靠解决方法吗?因为我不想使用这个黑客作为长期解决方案

ios iphone swift core-animation core-foundation
1个回答
4
投票

苹果写道:

由于类型 ID 的值可能会因版本而异,因此您的代码不应依赖于存储或硬编码的类型 ID,也不应对类型 ID 的任何观察到的属性进行硬编码(例如,它是一个小整数)。

这意味着您应该在

runtime 获取类型 ID,在您的情况下:

if CFGetTypeID(currentValue) == CGColorGetTypeID() { ... }
    
© www.soinside.com 2019 - 2024. All rights reserved.