简体   繁体   English

错误:当我从Swift中的不同类调用函数时,调用中的参数#1缺少参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM