2016-08-04 16 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

Как уже было сказано в комментариях, NSColor имеет init(cgColor:) инициализатору, что может сделать вашу проблему устаревшей.

Но так как вы спрашиваете, почему он не компилируется: Причина заключается в том, что NSColor имеет CGColor собственности, и что конфликты с CGColor типа. В качестве временного решения можно использовать CGColorRef псевдоним:

extension NSColor { 

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

Как сказал Эрик Ая, проблема не существует с Xcode 8 беты 4. Причины в том, что свойство NSColor было переименована в cgColor, и не конфликт с CGColor типа,

+2

Я также заметил, что код OP работает в Xcode 8 b4. Apple, похоже, исправила эту проблему с компилятором. – Moritz

+0

Красивая! Спасибо за все знания! –

+0

@EricAya: Да, свойство было переименовано в 'cgColor' в Swift 3. –

2

Xcode явно плохо себя чувствует здесь. Обход проблемы: используйте полный тип в подписи.

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

Спасибо за быстрый ответ! –

+0

Я думаю, что это решение лучше, чем @ MartinR, потому что оно не зависит от наличия типов и, следовательно, является более общим – Alexander

+0

@AlexanderMomchliov: Я не согласен, но главным моментом моего ответа было объяснить * почему * проблема возникает. Это не «ошибочный компилятор», а противоречивые определения в рамках. –