2016-08-04 32 views
3

Das verwirrte mich ... Ich versuche, einen Komfort Initialisierer für NSColor zu schaffen, der aus einer CGColor macht, aber für einige dang Grund weigert es sich einfach zu bestätigen, dass CGColor existiert! Ich habe Cocoa importiert, und nur für die Vernunft habe ich auch CoreGraphics und sogar CoreGraphics.CGColor importiert, aber immer noch kein Glück!Warum sieht meine NSColor-Erweiterung keinen CGColor?

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

Kann mir jemand sagen, was ich falsch mache? Reinigung und Umbau hilft nicht ...

+4

Warum? 'NSColor' hat bereits ein [' 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 ... das wurde aus irgendeinem Grund nicht in meiner Autocomplete angezeigt. :/ –

Antwort

4

Wie bereits in den Kommentaren, NSColor eine init(cgColor:) initializer hat, dass Ihr Problem selbst überflüssig machen könnte.

Aber da Sie fragen, warum es nicht kompilieren: Der Grund dafür ist, dass NSColor eine CGColor Eigenschaft hat, und dass Konflikte mit dem CGColor Typ. Als Abhilfe kann man die CGColorRef Alias:

extension NSColor { 

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

Als Eric Aya gesagt, tritt das Problem nicht mit Xcode 8 Beta 4. Der Grund hierfür ist vorhanden, dass die NSColor Eigenschaft auf cgColor umbenannt wurde, und nicht Konflikt mit der CGColor Art mehr,

+2

Ich habe auch bemerkt, dass der OP-Code in Xcode 8 b4 funktioniert. Apple scheint dieses Compiler-Problem behoben zu haben. – Moritz

+0

Schön! Danke für all das Wissen! –

+0

@EricAya: Ja, die Eigenschaft wurde in Swift 3 in 'cgColor' umbenannt. –

2

Xcode ist hier eindeutig falsch. Umgehung: Verwenden Sie den vollständigen Typ der Signatur.

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

Danke für die schnelle Antwort! –

+0

Ich denke, diese Lösung ist besser als @ MartinR, weil es nicht auf die Verfügbarkeit einer Typalias angewiesen ist, und ist daher allgemeiner – Alexander

+0

@AlexanderMomchliov: Ich stimme nicht zu, aber der Hauptpunkt meiner Antwort war zu erklären * warum * Das Problem tritt auf. Es ist kein "mißverstandener Compiler", sondern widersprüchliche Definitionen in den Frameworks. –