swift - 有没有比使用 switch 语句更好的方法来快速访问变量的不同属性?

标签 swift loops properties

我有这段代码,它使用 for 循环迭代图像的每个像素,然后根据用户选择更改红色、绿色或蓝色 channel 的值。

我使用 switch 语句来选择 channel ,并在 for 循环中迭代每个像素以获得该像素适当的颜色属性。感觉很笨拙,但我想不出一种方法来简化它。

是否有另一种方法来访问该属性,以便我可以消除 switch 语句,而只使用一个 for 循环来根据用户选择选择正确的像素颜色?

func applyFilterTo(image:UIImage,forColor:String, withIntensity:Int) -> RGBAImage {
  var myRGBA = RGBAImage(image:image)!
  switch forColor {
  case "RED":
    for x in 0..<myRGBA.width {
      for y in 0..<myRGBA.height {
        let pixelIndex = y * myRGBA.width  + x
        var pixel = myRGBA.pixels[pixelIndex]
        let newValue = Double(pixel.red) + (Double(withIntensity)/100)*Double(pixel.red)
        myRGBA.pixels[pixelIndex].red = UInt8(max(0,min(255,newValue)))
      }
    }
  ...
}

对于其他选项重复上述内容,但唯一改变的是我选择的属性(红色、蓝色、绿色)。更好的方法来做到这一点?

最佳答案

实现此目的的一个好方法是将 switch 语句替换为 multiple dispatch ,例如Visitor Pattern 。根据 switch 语句中的选项数量,switch 语句是最容易阅读和理解的。

关于swift - 有没有比使用 switch 语句更好的方法来快速访问变量的不同属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40953489/

相关文章:

variables - 在Kotlin中,是否可以使用变量来调用方法或属性?

javascript - React Native通过Navigator将用户输入数据传递给Tab Bar IOS中的组件

java - 如何识别给定文件或字符串是否为 Java Properties 文件格式?

ios - 在 Swift 中寻找像 Uber 这样的司机动画

swift - 使用 URLSession 和后台获取以及使用 firebase 的远程通知

ios - 当我第一次打开应用程序时,我的导航栏字体不会更改为我的自定义字体

javascript - 我需要循环遍历一个数组并找到 18 岁以下的人。我应该先将其转换为字符串(toString)吗?

c - 字母表的嵌套循环

swift - 如何将异步函数的结果返回到 Swift 中的不同类

python - 使用列表中的项目创建文件名 - for 循环