无法调用非函数类型的'CIImage?'的值

14

这段代码可以完美地编译

let ciImage = CIImage(image:UIImage())

但是,当我将它移动到UIImage的扩展中时

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

我收到以下编译错误:

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

为什么会这样呢?


测试环境:Xcode Playground 7.1.1 和 Swift 2.1


2
非常有趣的问题。我以前从未遇到过这种情况。 - matt
1个回答

37

这是因为一旦进入UIImage后,CIImage这个术语被视为UIImage的CIImage属性,因为隐式的self作为消息接收者。换句话说,Swift将你的CIImage转换为self.CIImage,从那时起就一切都变得很困难。

你可以通过使用Swift的模块命名空间来消除歧义:

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

编辑 在 Swift 3 中,这个问题将会消失,因为所有属性都将以小写字母开头。属性将被命名为 ciImage,并且不会与 CIImage 类混淆。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接