我在现有的Obj-C UIImage类别中有这个实例方法:
- (UIImage *)applyDarkEffect;
我试图从像这样的Swift文件中调用它:
self.backgroundImageView.image = UIImage.applyDarkEffect(image)
但是得到这个编译错误:
Function produces expected type 'UIImage!'; did you mean to call it with '()'?
答案 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)()