【问题标题】:Why won't my NSColor extension see a CGColor?为什么我的 NSColor 扩展看不到 CGColor?
【发布时间】:2016-12-10 15:48:10
【问题描述】:

这让我感到困惑...我正在尝试为NSColor 创建一个方便的初始化程序,它可以从CGColor 中提取一个,但由于某种原因,它只是拒绝承认CGColor 的存在!我已经导入了Cocoa,为了理智,我还导入了CoreGraphics,甚至CoreGraphics.CGColor,但仍然没有运气!

谁能告诉我我做错了什么?清洁和重建无济于事......

【问题讨论】:

  • 为什么? NSColor 已经有一个 init(cgColor:)
  • @Hamish aw,dang...由于某种原因,它没有出现在我的自动完成中。 ://

标签: swift extension-methods swift-extensions nscolor cgcolor


【解决方案1】:

正如 cmets 中已经说过的, NSColor 有一个 init(cgColor:) 初始化器,这可能 让你的问题过时。

但既然你在问 为什么 它没有编译: 原因是NSColor 有一个CGColor 属性,并且与 CGColor 类型冲突。 作为一种解决方法,可以使用 CGColorRef 别名:

extension NSColor {

    convenience init(_ cgColor: CGColorRef) {
        // ...
    }
}

正如 Eric Aya 所说,Xcode 8 beta 4 不存在该问题。原因是NSColor 属性被重命名为cgColor,并且不再与CGColor 类型冲突,

【讨论】:

  • 我还注意到 OP 的代码在 Xcode 8 b4 中工作。 Apple 似乎已经修复了这个编译器问题。
  • 漂亮!感谢所有的知识!
  • @EricAya:是的,该属性在 Swift 3 中已重命名为 cgColor
【解决方案2】:

Xcode 显然在这里行为不端。解决方法:在签名中使用完整的类型。

convenience init(_ cgColor: CoreGraphics.CGColor)

【讨论】:

  • 感谢您的快速答复!
  • 我认为这个解决方案比@MartinR 的更好,因为它不依赖类型别名的可用性,因此更通用
  • @AlexanderMomchliov:我不反对,但我回答的重点是解释为什么会出现问题。它不是“行为不端的编译器”,而是框架中的冲突定义。
  • @MartinR 澄清一下,我更喜欢你的回答,因为你给出了背景解释。但是,我认为 EricAya 的解决方案更好。
猜你喜欢
  • 2022-06-11
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多