我试图编写一个Swift类(在Playground中),它接受字符串字典(例如PixelGreyScale
)并按顺序应用于图像中的每个像素。
我使用了类方法词典,但速度非常慢,我无法传递参数。
在下面的代码中,我的类被实例化,然后运行Process
方法,接受方法字典(a technique I saw on SO - 是否有更好的方法从字符串动态运行方法变量):
// Create an instance of the class, passing in the raw image
let p = ImageProcessor(src: rawImage);
// use a dictionary of method calls to queue up the process
let stack = [
{ p.PixelGreyScale() }
]
// run the process
p.Process(stack)
Process
方法调用堆栈中的每个方法并将当前像素设置为返回值:
func Process(stack: [() -> Pixel]) {
for y in 0..<rgba.height {
for x in 0..<rgba.width {
let index = y * rgba.width + x
currentIndex = index
rgba.pixels[index] = stack[0]()
}
}
}
此代码运行,但我显然没有正确行事!我遇到以下问题:
stack
字典为空。删除stack[0]()
调用并不会加快速度 - 在给定索引处获取像素时,堆栈中的某些内容似乎会导致速度变慢。stack
字典来调用方法,我无法传递参数,不得不求助于将事物移入和移出类变量。我尝试使用performSelector
,但每次尝试使用参数时都会出现例外情况。有没有办法传入字符串字典并使用它来控制执行哪些方法,使用参数并且没有速度问题?