不能称之为非功能类型的CIImage?'

时间:2015-12-05 14:55:31

标签: swift

此代码编译完全正确

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

1 个答案:

答案 0 :(得分:37)

这是因为,一旦在UIImage中,由于隐式CIImage作为消息接收者,因此术语CIImage被视为UIImage的self 属性换句话说,斯威夫特将你的CIImage转变为self.CIImage,而且从那里开始走下坡路。

您可以通过消除Swift对模块命名空间的使用来解决这个问题:

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

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