首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何键入检查CGColor / CGPath?

如何键入检查CGColor / CGPath?
EN

Stack Overflow用户
提问于 2016-07-07 18:02:46
回答 1查看 247关注 0票数 2

因此,它所显示的是一个与为斯威夫特归档错误类型相关的CoreFoundation。根据描述,没有对CGPath和CGColor进行类型检查,下面是演示该行为的bug的片段。

代码语言:javascript
复制
func check(a: AnyObject) -> Bool {
    return a is CGColor
}

check("hey") --> true
check(1.0) --> true
check(UIColor.redColor()) --> true

这就是我想要做的

代码语言:javascript
复制
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。目前这是可行的,但是苹果文档说CFTypeID是可以改变的,不应该依赖它。

代码语言:javascript
复制
    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))
         }
   }

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-07 18:16:39

苹果写道:

因为类型ID的值可以在不同版本之间更改,所以您的代码不应该依赖存储的或硬编码的类型ID,也不应该硬编码任何类型ID的可观察属性(例如,它是一个小整数)。

这意味着您应该在运行时获得类型ID,在您的情况下:

代码语言:javascript
复制
if CFGetTypeID(currentValue) == CGColorGetTypeID() { ... }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38252330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档