Skip to main content
 首页 » 操作系统

Swift:无法转换表达式的类型

2024年01月01日38dudu

我正在尝试用 Swift 编写我自己的 CIFilter。当涉及到该类的真正内容时,我遇到了问题,即 outputImage 方法:

class CustomFilter : CIFilter { 
    var kernel: CIKernel 
 
    var inputImage: CIImage 
    var color: CIColor 
    var threshold: NSNumber 
 
    // ... stuff omitted ... 
 
    func outputImage() -> CIImage { 
        let zero = NSNumber(double: 0 as Double) 
        let width = NSNumber(double: inputImage.extent().size.width.native as Double) 
        let height = NSNumber(double: inputImage.extent().size.height.native as Double) 
 
        let src = CISampler(image: inputImage) 
        let arguments  = [src, color, threshold] as [AnyObject] 
        let extent = [zero, zero, width, height] 
 
        return self.apply( 
            kernel, 
            arguments: arguments, 
            options: (kCIApplyOptionExtent: extent) 
        ) 
    } 
} 

关于方法最后一行的编译错误信息如下:

Cannot convert the expression's type '(@lvalue CIKernel, arguments: [AnyObject], options: (kCIApplyOptionExtent: [NSNumber]))' to type 'CIKernel!'

有更多 Swift 或 Core Image 经验的人可以给我指明正确的方向吗?即使经过一个小时的尝试和谷歌搜索,我也找不到答案......

请您参考如下方法:

使用方括号创建选项字典:

return self.apply(kernel, arguments: arguments, options: [kCIApplyOptionExtent: extent]) 

所需参数的类型为 [NSObject : AnyObject]!