2015-12-05 8 views
12

macht Diesen Code völlig in OrdnungKann Wert von Nichtfunktionsart 'CImage' nicht aufrufen?

let ciImage = CIImage(image:UIImage()) 

jedoch kompilieren, wenn ich es in eine Verlängerung von UIImage

extension UIImage { 
    func foo() { 
     let ciImage = CIImage(image:UIImage()) // compile error 
    } 
} 

ich den folgenden Compiler-Fehler

 
Cannot call value of non-function type 'CIImage?' 

Warum bekommen bewegen?


Getestet mit Xcode Playground 7.1.1. und Swift 2.1

+2

Sehr interessante Frage. Ich bin dem nie zuvor begegnet. – matt

Antwort

36

Es ist, weil, einmal im Inneren UIImage, der Begriff CIImage als CIImageEigenschaft von UIImage zu sehen ist, aufgrund impliziter self als Nachrichtenempfänger - mit anderen Worten, wird Swift Ihre CIImage in self.CIImage und es ist alles bergab von dort.

extension UIImage { 
    func foo() { 
     let ciImage = UIKit.CIImage(image:UIImage()) 
    } 
} 

EDIT In Swift 3 dieses Problem wird weggehen, weil alle Eigenschaften mit kleinen Buchstaben beginnen:

Sie können dies durch die Verwendung des Moduls Namespacing der Disambiguierung durch Swift lösen. Die Eigenschaft wird ciImage genannt, und es wird keine Verwechslung mit der Klasse CIImage geben.

+0

Großartig, danke matt. –

Verwandte Themen