为什么我的NSColor扩展程序看不到CGColor?

问题描述:

这让我感到困惑......我试图创建一个NSColor的便利初始值设定项,它使CGColor中的一个出现,但由于某些原因,它只是拒绝确认存在CGColor!我已经进口Cocoa,只是为了理智,我还输入了CoreGraphics,甚至CoreGraphics.CGColor,但仍然没有运气!为什么我的NSColor扩展程序看不到CGColor?

All the imports I should need, but CGColor is not found

谁能告诉我什么,我做错了什么?清理和重建并没有帮助...

+4

为什么? 'NSColor'已经有一个['init(cgColor:)'](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSColor_Class/#//apple_ref/occ/clm/NSColor/colorWithCGColor :) – Hamish

+0

@Hamish aw,dang ......出于某种原因,我的自动完成功能没有显示出来。 :/ –

正如已经在评论中说, NSColorinit(cgColor:)初始化,这可能 使您的问题已经过时了。

但既然你问为什么它不会编译: 的原因是NSColorCGColor 特性,以及与CGColor类型冲突。 作为一种变通方法,可以使用CGColorRef别名:

extension NSColor { 

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

正如埃里克·绫说,这个问题不存在的Xcode 8测试版4的原因,就是NSColor物业更名为cgColor,并且不与CGColor类型冲突,

+2

我也注意到OP的代码在Xcode 8 b4中工作。 Apple似乎已经解决了这个编译器问题。 – Moritz

+0

美丽!感谢所有的知识! –

+0

@EricAya:是的,在Swift 3中,该属性被重命名为'cgColor'。 –

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

convenience init(_ cgColor: CoreGraphics.CGColor) 
+1

感谢您的快速回答! –

+0

我认为这个解决方案比@ MartinR更好,因为它不依赖于一个typealias的可用性,因此更通用 – Alexander

+0

@AlexanderMomchliov:我不反对,但我的答案的主要观点是解释*为什么*发生问题。这不是一个“行为不端的编译器”,而是框架中的定义冲突。 –