【问题标题】:Cannot call value of non-function type 'CIImage?'无法调用非函数类型“CIImage?”的值
【发布时间】:2016-03-10 11:31:21
【问题描述】:

这段代码编译得很好

let ciImage = CIImage(image:UIImage())

但是当我把它移到UIImage的扩展中时

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

我得到以下编译错误

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

为什么?


使用 Xcode Playground 7.1.1 测试。和 Swift 2.1

【问题讨论】:

  • 非常有趣的问题。我以前从未遇到过。

标签: swift


【解决方案1】:

这是因为,一旦进入 UIImage,术语 CIImage 被视为 UIImage 的 CIImage 属性,因为隐含的 self 作为消息接收者——换句话说,Swift 将你的CIImage 进入 self.CIImage,然后一切都从那里走下坡路。

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

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

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

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 2020-02-01
    • 2021-01-15
    • 2021-03-30
    • 2016-09-26
    • 2017-06-27
    • 2019-05-05
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多