Obj-C Instance方法返回从Swift调用的instanceType - Function生成期望类型'UIImage!'错误

时间:2015-06-22 18:05:30

标签: ios objective-c swift

我在现有的Obj-C UIImage类别中有这个实例方法:

- (UIImage *)applyDarkEffect;

我试图从像这样的Swift文件中调用它:

 self.backgroundImageView.image = UIImage.applyDarkEffect(image)

但是得到这个编译错误:

Function produces expected type 'UIImage!'; did you mean to call it with '()'?

3 个答案:

答案 0 :(得分:2)

如果你看一下你在Objective C图像类别中定义的方法,它就是实例方法,你试图在swift中使用UIImage类来调用它。

您基本上可以使用以下两种方法之一,

无论哪种,

self.backgroundImageView.image = self.someImage.applyDarkEffect() // notice the method does not take argument

或者如果你想使用类级方法,那么首先创建一个闭包并将其称为

let applyEffectToImageClosure = UIImage.applyDarkEffect(self.someImage)
self.backgroundImageView.image = applyEffectToImageClosure()

答案 1 :(得分:1)

好的,那两个不匹配。您的Objective-C方法没有采用任何参数,但在您的Swift代码中,您尝试传递一个名为image的参数

你的Objective-C方法是一个实例方法,你的Swift代码试图调用一个类方法,这是另一个不匹配。

您的Swift代码应如下所示:

self.backgroundImageView.image = someImage.applyDarkEffect()

(其中someImage是您要发送applyDarkEffect消息的UIImage实例。

答案 2 :(得分:1)

这样做的原因是该方法是一个实例方法(在声明开头的 - ),但您试图将其称为type method

假设您要对现有图像应用暗效果,则需要使用UIImage调用它: -

self.backgroundImageView.image = image.applyDarkEffect()

值得一提的是,您可以将其称为类型方法,但要传递您想要处理的实例: -

self.backgroundImageView.image = UIImage.applyDarkEffect(image)()