此代码编译完全正确
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
答案 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类混淆。