[英]Error: Missing argument for parameter #1 in call when I am calling a function from different class in Swift
Hey guys I am trying to call applyProcessing()
on ViewController class using this method: 大家好,我正在尝试使用以下方法在ViewController类上调用
applyProcessing()
:
@IBAction func intensityChanged(sender: AnyObject) {
FilteredMainImageOne.applyProcessing()
}
and suddenly I got an error message " Missing argument for parameter #1 in call " 突然我收到一条错误消息“ 呼叫中参数#1缺少参数 ”
This is my FilteredMainImageOne class: 这是我的FilteredMainImageOne类:
class FilteredMainImageOne {
var originalImage: UIImage!
var filteredImage: UIImage?
var imageQueue: NSOperationQueue?
var gpuContext: CIContext
var filter: CIFilter!
var filterNAme: String
var homeViewController: ViewController
weak var delegate: ViewController?
init(name: String, original: UIImage, queue: NSOperationQueue, context: CIContext, homeVC: ViewController) {
self.filterNAme = name
self.originalImage = original
self.imageQueue = queue
self.gpuContext = context
self.homeViewController = homeVC
}
func applyProcessing() {
println("finish picking")
var imageFilter = CIFilter(name: self.filterNAme)
let inputKeys = imageFilter.inputKeys() as! [NSString]
if contains(inputKeys, kCIInputIntensityKey) { filter.setValue(delegate!.intensity.value, forKey: kCIInputIntensityKey) }
if contains(inputKeys, kCIInputRadiusKey) { filter.setValue(delegate!.intensity.value * 200, forKey: kCIInputRadiusKey) }
if contains(inputKeys, kCIInputScaleKey) { filter.setValue(delegate!.intensity.value * 10, forKey: kCIInputScaleKey) }
if contains(inputKeys, kCIInputCenterKey) { filter.setValue(CIVector(x: originalImage.size.width / 2, y: originalImage.size.height / 2), forKey: kCIInputCenterKey) }
let cgimg = gpuContext.createCGImage(filter.outputImage, fromRect: filter.outputImage.extent())
let processedImage = UIImage(CGImage: cgimg)
delegate!.imageView.image = processedImage
}
func generateImage (completionHandler: (image: UIImage) -> Void) {
self.imageQueue?.addOperationWithBlock({ () -> Void in
var image = CIImage(image: self.originalImage)
if self.originalImage.imageOrientation == UIImageOrientation.Right {
image = image.imageByApplyingOrientation(6)
}
var imageFilter = CIFilter(name: self.filterNAme)
imageFilter.setDefaults()
imageFilter.setValue(image, forKey: kCIInputImageKey)
var result = imageFilter.valueForKey(kCIOutputImageKey) as! CIImage
var extent = result.extent()
var imageRef = self.gpuContext.createCGImage(result, fromRect: extent)
self.filter = imageFilter
self.filteredImage = UIImage(CGImage: imageRef)
UIGraphicsBeginImageContext(self.homeViewController.imageView.image!.size)
self.filteredImage!.drawInRect(CGRect(origin: self.homeViewController.imageView.bounds.origin, size: self.homeViewController.imageView.image!.size))
var largeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
completionHandler(image: self.filteredImage!)
})
})
}
}
What is wrong with my code? 我的代码有什么问题?
You are trying to call it in a static context, but that is an instance method, so you have to create an instance of FilteredMainImageOne
and invoke it from that instance: 您试图在静态上下文中调用它,但这是一个实例方法,因此您必须创建一个
FilteredMainImageOne
实例并从该实例中调用它:
let filter = FilteredMainImageOne(...)
filter.applyProcessing()
The reason of that strange error message is that instance methods are actually static curried methods, taking a class instance as their first parameter - that means that the last line of the above code could be rewritten as: 发出奇怪错误消息的原因是实例方法实际上是静态的咖喱方法,将类实例作为其第一个参数-这意味着上述代码的最后一行可以重写为:
FilteredMainImageOne.applyProcessing(filter)()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.