2016-08-04 88 views
3

這讓我感到困惑......我試圖創建一個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 ......出於某種原因,我的自動完成功能沒有顯示出來。 :/ –

回答

4

正如已經在評論中說, 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'。 –

2

Xcode在這裏顯然是行爲不當。解決方法:在簽名中使用完整類型。

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

感謝您的快速回答! –

+0

我認爲這個解決方案比@ MartinR更好,因爲它不依賴於一個typealias的可用性,因此更通用 – Alexander

+0

@AlexanderMomchliov:我不反對,但我的答案的主要觀點是解釋*爲什麼*發生問題。這不是一個「行爲不端的編譯器」,而是框架中的定義衝突。 –

相關問題