从AnyObject转换为CGColor?没有错误或警告

时间:2015-11-07 23:52:21

标签: ios casting compiler-warnings cgcolor anyobject

Hello StackOverflow:)

自从我升级到swift 2.0后,我一直遇到一个奇怪的问题

我正在尝试设置边框颜色,所以我写的是self.layer.borderColor = borderColor as! CGColor,其中borderColor是AnyObject,而self.layer.borderColor是CGColor?

如果我写self.layer.borderColor = borderColor as! CGColor,我会收到警告

  

将强制向下转换为'CGColor'作为可选项永远不会产生'nil'

,建议改为使用as?

如果我改为写self.layer.borderColor = borderColor as? CGColor,我会收到错误

  

条件向下转换为CoreFoundation类型'CGColor'将始终成功

为了确保我没有遗漏某些内容,我还尝试撰写container.layer.borderColor = borderColor as CGColorcontainer.layer.borderColor = borderColor这两项都出现了以下错误:

  

'AnyObject'不能转换为'CGColor';你的意思是用'as!'迫使低垂?

使用as!时使用XCode提供的警告并不是那么可怕,但我更愿意保持我的代码免费警告。为了说明我真的需要你的帮助。这是我不理解的东西,还是仅仅是我应该报告的Swift 2.0中的一个错误。

干杯!

雅各

3 个答案:

答案 0 :(得分:5)

xcode还给了我以下提示:

  

在演员表周围添加括号以使此警告静音

好吧......当xcode这么说......

layer.borderColor = (borderColor as! CGColor)

答案 1 :(得分:4)

您正在使用图层颜色,这是核心图形,您需要使用属性cgColor设置核心图形颜色

layer.borderColor = UIColor.red.cgColor

答案 2 :(得分:1)

是的,这是一个众所周知的错误,并且仍然没有解决! Unnecessary message for non-optional to non-optional cast

如果您不喜欢警告,则应遵循Xcode的建议:

  

在演员表上加上括号以使该警告消失。