所以看来存在一个与 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))
}
}
有人找到解决此问题的可靠解决方法吗?因为我不想使用这个黑客作为长期解决方案