【问题标题】:Casting from AnyObject to CGColor? without errors or warnings从 AnyObject 转换为 CGColor?没有错误或警告
【发布时间】:2016-02-08 22:09:03
【问题描述】:

你好 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 中的一个错误。

干杯!

雅各布

【问题讨论】:

    标签: ios casting compiler-warnings cgcolor anyobject


    【解决方案1】:

    您使用的是图层颜色,即核心图形,您需要通过属性 cgColor 设置核心图形颜色

    layer.borderColor = UIColor.red.cgColor
    

    【讨论】:

    • 很好地使用了 UIColor cgColor 属性!甚至不知道它的存在,Xcode 也没有帮我找到它。
    【解决方案2】:

    xcode 还给了我以下提示:

    在演员表周围添加括号以消除此警告

    嗯...当 xcode 这么说时...

    layer.borderColor = (borderColor as! CGColor)
    

    【讨论】:

    • 这只会使警告消失,并不能解决根本问题。我自己正在寻找正确的答案,所以我不知道它是什么,但我不认为是那样。
    • 这似乎有正确答案:stackoverflow.com/questions/43927167/…
    【解决方案3】:

    是的,这是一个众所周知的错误,但仍未解决! Unnecessary message for non-optional to non-optional cast

    如果你不喜欢这个警告,你应该遵循 Xcode 的建议:

    在演员表周围添加括号以消除此警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2022-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多